我试图在任务列表上使用
下面是示例代码块:
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
,那么您需要在整个调用堆栈中都使用异步)。 - Scott Chamberlain