具有 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 代替 - 它可以工作。
您的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);
你是这个意思吗?