【发布时间】:2015-08-29 10:53:48
【问题描述】:
我正在尝试在任务列表中使用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.WaitAll调用,那么在另一个线程上启动任务有什么意义?您将获得更好的性能摆脱ToListAsync并使其成为ToList并同步运行它。 (或者如果您确实想使用ToListAsync,那么您需要在调用堆栈中一直使用异步。
标签: c# .net lambda async-await task-parallel-library