【发布时间】:2021-06-14 02:18:19
【问题描述】:
我有一组任务必须在最后一个任务运行之前完成。具体来说:
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
var task1 = Task.Run(() =>
{
Thread.Sleep(5000);
Console.WriteLine("Task1");
});
var task2 = Task.Run(() =>
{
Thread.Sleep(5000);
Console.WriteLine("Task2");
});
var task3 = Task.Run(() =>
{
Thread.Sleep(5000);
Console.WriteLine("Task2");
});
var last = Task.Run(() =>
{
Console.WriteLine("Last");
});
var tasks = new List<Task>();
tasks.Add(task1);
tasks.Add(task2);
tasks.Add(task3);
await Task.WhenAll(tasks).ContinueWith(t => last);
}
目前他们的结局是这样的:
Last
Task2
Task3
Last1
我希望他们像这样结束:
Task1
Task2
Task3
Last
前 3 个的顺序无关紧要,重要的是 Last 任务最后完成。 我不能阻塞线程或等待集合完成和类似的东西,只有 Last 任务必须在前三个完成后执行。
【问题讨论】:
-
你不应该开始最后一个任务
-
不要使用
ContinueWith?
标签: c# asp.net .net asynchronous task