加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

如何链接独立的C#任务?

发布时间:2020-12-15 18:16:24 所属栏目:百科 来源:网络整理
导读:假设我有两个创建Task对象的独立异步函数(我无法控制): Task A();Task B(); 和其他一些非异步功能 void X(); 如何构建一个单独的任务链,按顺序执行所有这些,并允许附加继续(将在X之后执行)? 如果我这样做: Task Sequential(){ return A() .ContinueWith(t
假设我有两个创建Task对象的独立异步函数(我无法控制):
Task A();
Task B();

和其他一些非异步功能

void X();

如何构建一个单独的任务链,按顺序执行所有这些,并允许附加继续(将在X之后执行)?

如果我这样做:

Task Sequential()
{
   return A()
     .ContinueWith(t => { B(); })
     .ContinueWith(t => { X(); });
}

这不起作用,因为B将启动一个新的任务链.如果B需要很长时间才能完成,则首先执行X(以及在返回的Task上,Sequential的调用者可能会继续执行任何其他操作).我需要X作为单个任务链中的最后一个元素,以B任务为先例.

如果我这样做:

Task Sequential()
{
   return A()
     .ContinueWith(t => { B().ContinueWith(t => { X(); }); });
}

这只能部分解决问题,因为即使A,B和X现在按顺序执行,如果调用者执行Sequential().ContinueWith,该延续将并行执行到B和X,而不是X.

解决方法

有没有理由不使用等待?例如,
async Task Sequential()
{
    await A();
    await B();
    X();
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读