完成第一个任务后,如何使异步任务继续执行下一个任务?
c#
依赖完成后如何继续下一个任务?会有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);
回答
您可以使用两个单独的函数,甚至是局部函数来组合任务:
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);