Как добиться асинхронности вместо параллелизма в F #

(Придерживаемся распространенного примера с асинхронной выборкой многих веб-страниц)

Как мне выполнить асинхронное выполнение нескольких (сотен) запросов веб-страниц, а затем ждать, пока все запросы будут завершить перед переходом к следующему шагу? Async.AsParallel обрабатывает несколько запросов одновременно, что зависит от количества ядер ЦП. Захват веб-страницы не является операцией, связанной с процессором. Не удовлетворенный ускорением Async.AsParallel, я ищу альтернативы.

Я попытался соединить точки между Async.StartAsTask и Task []. WaitAll. Инстинктивно я написал следующий код, но он не компилируется.

let processItemsConcurrently (items : int seq) = 
  let tasks = items |> Seq.map (fun item -> Async.StartAsTask(fetchAsync item))
  Tasks.Task.WaitAll(tasks) 

Как вы подойдете к этому?

8
задан codekaizen 30 November 2010 в 08:06
поделиться