假设我有两个创建任务对象的独立异步函数(我无法控制):
Task A();
Task B();
和其他一些非异步函数
void X();
我如何构建一个任务链来按顺序执行所有这些并允许附加进一步的延续(将在 X 之后执行)?
如果我这样做:
Task Sequential()
{
return A()
.ContinueWith(t => { B(); })
.ContinueWith(t => { X(); });
}
那是行不通的,因为 B 会启动一个新的 Task 链。如果 B 需要很长时间才能完成,则 X 将首先执行(以及 Sequential 的调用者可能在返回的 Task 上继续使用的任何其他内容)。我需要 X 成为单个任务链中的最后一个元素,并以 B 任务作为其先例。
如果我这样做:
Task Sequential()
{
return A()
.ContinueWith(t => { B().ContinueWith(t => { X(); }); });
}
这只是部分解决了问题,因为即使 A、B 和 X 现在将按顺序执行,如果调用者执行 Sequential().ContinueWith,该延续将与 B 和 X 并行执行,而不是在 X 之后执行。
最佳答案
有什么理由不使用 await 吗?例如,
async Task Sequential()
{
await A();
await B();
X();
}
关于c# - 如何链接独立的 C# 任务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40943380/