具有 OnFaulted 延续的任务在 WaitAll 上抛出 TaskCancelException

本文关键字:TaskCancelException WaitAll OnFaulted 延续 任务 具有 | 更新日期: 2023-09-27 18:31:26

今天遇到了这个。谁能解释为什么这会抛出任务取消异常?

Task[] tasks = new Task[4];
for (int i = 0; i < 4; i++)
{
    Task t = Task.Run(() => { }).ContinueWith((task) => { }, TaskContinuationOptions.OnlyOnFaulted);
    tasks[i] = t;
}
Task.WaitAll(tasks);

如果我指定 NotOnFaulted 代替 - 它可以工作。

具有 OnFaulted 延续的任务在 WaitAll 上抛出 TaskCancelException

您的Task t变量是返回值ContinueWith,只有在抛出Exception (OnlyOnFaulted)时才执行。否则,将继续被取消。

所以在这种情况下,它将被取消;而不是执行。因此,等待它会抛出TaskCancelledException

Task[] tasks = new Task[4];
for (int i = 0; i < 4; i++)
{
    Task t = Task.Run(() =>
    {
    });
    t.ContinueWith((task) => 
    { 
    }, TaskContinuationOptions.OnlyOnFaulted);
    tasks[i] = t;//t is from Task.Run not ContinueWith
}
Task.WaitAll(tasks);

你是这个意思吗?

相关文章:
  • 没有找到相关文章