TaskCanceledException与ContinueWith

Bar*_*ast 6 .net c# task

我一直在尝试弄清楚为什么为什么要获取TaskCanceledException来获取一些最近开始行为异常的异步代码。我已将问题简化为一个小的代码片段,这让我抓狂了:

static void Main(string[] args)
{
    RunTest();
}

private static void RunTest()
{
    Task.Delay(1000).ContinueWith(t => Console.WriteLine("{0}", t.Exception), TaskContinuationOptions.OnlyOnFaulted).Wait();
}
Run Code Online (Sandbox Code Playgroud)

据我所知,这应该只是暂停一秒钟然后关闭。不会调用ContinueWith(这仅适用于我的实际用例)。但是,相反,我收到了TaskCanceledException,我不知道那是哪里来的!

Phi*_*yck 2

您使用了错误的任务继续选项:

请参阅以下链接:https://msdn.microsoft.com/en-us/library/system.threading.tasks.taskcontinuationoptions%28v=vs.110%29.aspx

它表示:指定仅当其前件引发未处理的异常时才应安排延续任务。此选项对于多任务延续无效。