我正在使用 C#、TPL。我有一个类包含一些执行一些子任务的异步方法,为简单起见,我将只考虑一种方法和一个子任务:
class Test1
{
private Task SubTask() => Task.Delay(1000);
public async Task FullTask()
{
Console.WriteLine("Task Start");
await SubTask();
Console.WriteLine("Task Middle");
await SubTask();
Console.WriteLine("Task End");
}
static async Task Main()
{
Test1 Test = new Test1();
Task Task1 = Test.FullTask();
Task Task2 = Test.FullTask();
await Task.WhenAll(Task1, Task2);
}
}
Run Code Online (Sandbox Code Playgroud)
执行后,控制台中会打印以下(预期的)结果:
Task Start
Task Start
Task Middle
Task Middle
Task End
Task End
Run Code Online (Sandbox Code Playgroud)
问题是每次调用都FullTask必须在前一个调用完成后运行,如果多个调用FullTask同时发生,则必须逐个处理。我的第一个想法是使用该ContinueWith方法:
class Test2
{
private Task LastTask = Task.CompletedTask;
private Task SubTask() …Run Code Online (Sandbox Code Playgroud)