我正在尝试对任务列表使用 Task.WaitAll
。问题是任务是一个异步 lambda,它会破坏 Tasks.WaitAll
,因为它从不等待。
这是一个示例代码块:
List<Task> tasks = new List<Task>();
tasks.Add(Task.Factory.StartNew(async () =>
{
using (dbContext = new DatabaseContext())
{
var records = await dbContext.Where(r => r.Id = 100).ToListAsync();
//do long cpu process here...
}
}
Task.WaitAll(tasks);
//do more stuff here
由于异步 lambda,这不会等待。那么我应该如何在我的 lambda 中等待 I/O 操作?
最佳答案
Task.Factory.StartNew
无法识别 async
委托(delegate),因为没有接受返回 Task
的函数的重载。
这加上其他原因(参见 StartNew is dangerous)是您应该在此处使用 Task.Run
的原因:
tasks.Add(Task.Run(async () => ...
关于c# - 带有异步 lambda 和 Task.WaitAll 的 Task.Factory.StartNew,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30819847/