c# - 带有异步 lambda 和 Task.WaitAll 的 Task.Factory.StartNew

标签 c# .net lambda async-await task-parallel-library

我正在尝试对任务列表使用 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/

相关文章:

Python:减少元组的元组

c# - 将简单的 lambda 表达式或局部函数分配给委托(delegate)的性能

c# - 双重分组为 Dictionary<int, Dictionary<string, List<Model>>>()

c# - SQL Server密码的保存方法

c# - 对 DTO 的 ASP.NET WebApi OData 支持

c# - 为什么 IList<T> 不提供 List<T> 提供的所有方法?我应该使用哪个?

c# - 有没有办法同步运行异步 lambda?

c# - WebSecurity.InitializeDatabaseConnection 不配合代码优先迁移

c# - 当工厂方法返回 null 时,我应该抛出什么异常?

c# - 从 .XSD 文件中提取枚举数据