小编Coc*_*ut9的帖子

一个接一个地执行非阻塞异步任务

我正在使用 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)

c# asynchronous task-parallel-library async-await

1
推荐指数
1
解决办法
53
查看次数