以下看似简单的情况导致我出现问题:
private List<Task> _Tasks = new List<Task>();
void someMethod() {
//stuff
prepareWork();
Task.WaitAll(_Tasks.ToArray());
//do more stuff
}
private void prepareWork() {
for (int i = 0; i < 2; ++i) {
_Tasks.Add(someWork());
//_Tasks.Add(Task.Run(() => someWork())); //<---- This does work
}
}
private async Task someWork() {
Thread.Sleep(2000);
}
我希望someWork()可以异步运行,但事实并非如此。当我用下面的注释行替换_Tasks.Add(someWork());
行时,情况就是这样。在我看来,我缺少有关C#/ async方式的一些基本知识,我将不胜感激。
答案 0 :(得分:-1)
这不是答案(部分不正确),但在下面由Peter留下的评论中添加了一个 有效且被忽略的点。
如果Peter可以回答问题,则会删除
添加任务时,您刚刚创建了要完成的工作。但是您注意到它尚未开始。
_Tasks.Add(someWork());
要运行任何任务,您必须调用其start方法,要运行列表中的所有任务,您可以启动它们,然后等待完成所有工作。
_task.ForEach(t=>t.Start());