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);
推荐阅读
- excel - 在 Excel 中用分号和空格分割文本字符串
- reactjs - React 组件属性正在由连接和数据存储更新,但未显示
- android - DataGrid Android Studio 水平垂直滚动
- aem - AEM 内部重定向和解析嵌套内容
- mysql - 我的mysql存储过程有什么问题?
- css - 选择子标签:在元素之后,除了最后一个
- javascript - 将 redux 存储保存到本地存储 - 使用 lit-element
- laravel - 为什么我看到调用未定义的方法错误?
- c++ - 从具有通用返回类型的 crtp 基类调用派生类中的函数
- html - 对齐模态框中所有卡片的内容