使用ContinueWith的TaskCanceledException

我一直试图找出为什么我得到一个最近开始行为不端的异步代码的TaskCanceledException。 我把我的问题减少到一个让我挠头的小代码片段:

static void Main(string[] args) { RunTest(); } private static void RunTest() { Task.Delay(1000).ContinueWith(t => Console.WriteLine("{0}", t.Exception), TaskContinuationOptions.OnlyOnFaulted).Wait(); } 

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

您正在使用错误的taskcontinuationoption:

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

它说:指定只有在其前提投掷未处理的exception时才应安排延续任务。 此选项对多任务延续无效。