今天进入这个。 谁能解释为什么会抛出TaskCancelledException?
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 - 它可以工作。
答案 0 :(得分:2)
您的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);
你的意思是?