我想要做的是以非阻塞模式延迟任务,然后等待所有任务完成。我尝试添加通过Task.Delay返回的任务对象,然后使用Task.WaitAll,但似乎这样做没用。我应该如何解决这个问题?
class Program
{
public static async void Foo(int num)
{
Console.WriteLine("Thread {0} - Start {1}", Thread.CurrentThread.ManagedThreadId, num);
var newTask = Task.Delay(1000);
TaskList.Add(newTask);
await newTask;
Console.WriteLine("Thread {0} - End {1}", Thread.CurrentThread.ManagedThreadId, num);
}
public static List<Task> TaskList = new List<Task>();
public static void Main(string[] args)
{
for (int i = 0; i < 3; i++)
{
int idx = i;
TaskList.Add(Task.Factory.StartNew(() => Foo(idx)));
}
Task.WaitAll(TaskList.ToArray());
}
}
await
的行为通常会变得奇怪... - Reed Copseyasync void
方法传递给Task.Factory.StartNew
是不好的做法。在await
之后,您无法跟踪所启动的挂起任务或捕获其可能抛出的任何异常。请参阅此链接了解更多信息:https://dev59.com/nnjZa4cB1Zd3GeqPhLEB - noseratio - open to work