2011-12-14 2 views
3

Возможно ли использовать рабочие процессы Async в F #, выполнить несколько параллельных операций async параллельно, но не дождаться результата? Это имеет смысл? :)Рабочие процессы Async в F # - Выполняются параллельно и не ждут результата

Так что вместо этого:

let runAll() = 
    urlList 
    |> Seq.map fetchAsync 
    |> Async.Parallel 
    |> Async.RunSynchronously 
    |> ignore 

ли что-то вроде этого:

let runAll() = 
    urlList 
    |> Seq.map fetchAsync 
    |> Async.Parallel 
    |> ignore 

Конечно, мне нужно, чтобы начать работу, поэтому я попытался просто начать выполнение асинхронного в функции fetchAsync, то он работает только путем вызова функции:

let runAll() = 
    urlList 
    |> Seq.map fetchAsync 
    |> ignore 

Но тогда мой код больше не распараллелен:/

Возможно, я пропустил что-то очевидное.

Спасибо за помощь!

ответ

1

Насколько я понимаю, вы хотите запустить целый стек операций Async, а затем сделать что-то еще, не дожидаясь их завершения. В этом случае вы хотите использовать Async.Start следующим образом:

let runAll() = 
    urlList 
    |> List.map Async.Start 
+0

Спасибо! Но мой код теперь больше не распараллелен? –

+0

Код по-прежнему распараллелен, потому что вы вызываете 'Async.Start' для каждого элемента списка. Штраф в том, что у вас нет способа узнать, когда это будет сделано. –

+0

Спасибо, Джон! Это полезно. –

Смежные вопросы