我添加一个任务到任务列表中,方法如下:
taskList.Add(new Task(async () =>
{
// work here
await MethodInsideThatNeedsAwaiting(); // if that has anything to do with it
// more work
}));
调用
Task.WaitAll(tasklist);
之后会"卡住"。程序继续运行,但是从列表中任何任务都没有听到任何消息,也不会触发任何断点,就好像它在自己的内部异步循环中被卡住了。我添加任务到列表的方式有问题吗?这里出了什么问题?
我还尝试了以下方法,以防万一
async
关键字是问题所在,但它仍然不能工作:taskList.Add(new Task(() =>
{
// work here
MethodInsideThatNeedsAwaiting().Wait();
// more work
}));
这个却 按预期工作。
private async Task GetStuff()
{
// same work here
await MethodInsideThatNeedsAwaiting();
// more work
}
然后使用 taskList.Add(GetStuff());
将其添加。调用 Task.WaitAll(tasklist);
对此没有问题。
new Task
。你有一个异步 lambda,它返回一个任务。如果你想让它运行,那就调用它。你现在的做法就像是制作了一个待办事项清单,上面写着“制作一个待办事项清单”,但没有写“完成清单上的任务”!只需要完成清单上的任务,不需要再制作一个第二份清单来告诉你完成第一份清单上的任务;你只需要去完成它们。你已经通过实验发现了这一点,所以我不清楚你在这里提出了什么问题。 - Eric Lippert});`,并简单地将其封装在taskList.Add()调用中。
- Derptastic