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

前端之家收集整理的这篇文章主要介绍了如何链接独立的C#任务?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
假设我有两个创建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();
}

猜你在找的C#相关文章