具有异步任务方法的对象列表,同时执行所有操作

Ale*_*lex 4 c# concurrency task-parallel-library async-await .net-4.5

鉴于以下内容:

BlockingCollection<MyObject> collection;

public class MyObject
{
   public async Task<ReturnObject> DoWork() 
   {       
      (...) 
      return await SomeIOWorkAsync();
   }
}
Run Code Online (Sandbox Code Playgroud)

同时在集合中的所有 MyObjects 上异步执行所有 DoWork()任务的正确/最佳性能(在捕获返回对象时),理想情况下具有合理的线程限制(我相信Task Factory/ThreadPool在这里进行一些管理) )?

Jus*_*now 6

您可以使用WhenAll扩展方法.

var combinedTask = await Task.WhenAll(collection.Select(x => x.DoWork());
Run Code Online (Sandbox Code Playgroud)

它将同时启动所有任务并等待所有任务完成.