首页 > 解决方案 > 第一个任务完成后如何使异步任务继续下一个任务?

问题描述

依赖项完成后如何继续下一项任务?会Task.ContinueWith()帮助吗?如果不是,我怎样才能有效地处理以下情况而不将这些功能组合成一个功能?假设有 4 个异步函数:

async Task<string> Func1(string a){}
async Task<string> Func2(string returnedStringFromFunc1 ){}
async Task<string> Func3(string b){}
async Task<string> Func4(string returnedStringFromFunc3){}

Task tsk1 = func1("abc");
Task tsk3 = func3("efg");
await tsk1; // In case tsk3 is completed early, flow is waiting here.
    // Instead I could have started tsk4. 
Task tsk2 = func2(tsk1.Result);
await tsk3;
Task tsk4 = func4(tsk3.Result);

标签: c#asynchronousasync-await

解决方案


您可以使用两个单独的函数,甚至是本地函数来组合任务:

async Task<string> Flow1(string input)
{
    var r1=await func1(input);
    var r2=await func2(r1);
    return r2;
}

async Task<string> Flow2(string input)
{
    var r1=await func3(input);
    var r2=await func4(r1);
    return r2;
}

var task1=Flow1("abc");
var task2=Flow2("efg");

await Task.WhenAll(task1,task2);

推荐阅读