我希望能够在前提条件满足的情况下将一些任务链接起来,如果我使用的
CancellationToken
没有被触发,就继续执行。我的目标是实现类似于以下代码的效果:var cts = new CancellationTokenSource();
var cancellationToken = cts.Token;
var t = Task.Run(async () => {
if (cancellationToken.IsCancellationRequested) return;
await t1();
if (cancellationToken.IsCancellationRequested) return;
await t2();
if (cancellationToken.IsCancellationRequested) return;
await t3();
if (cancellationToken.IsCancellationRequested) return;
await t4();
});
var timeout = Task.Delay(TimeSpan.FromSeconds(4));
var completedTask = await Task.WhenAny(t, timeout);
if (completedTask != t)
{
cts.Cancel();
await t;
}
我目前的内容是这样的,虽然有点啰嗦,但它能够工作。
CancellationToken
作为Task.Run
的参数传递,只有在任务仍然被调度且尚未启动时才会取消该任务。因此,您的代码将允许所有任务运行或者不允许任何任务运行。这不是OP想要的。 - Theodor Zoulias