好吧,我的问题很简单。为什么这段代码不抛出TaskCancelledException
?
static void Main()
{
var v = Task.Run(() =>
{
Thread.Sleep(1000);
return 10;
}, new CancellationTokenSource(500).Token).Result;
Console.WriteLine(v); // this outputs 10 - instead of throwing error.
Console.Read();
}
但这有效
static void Main()
{
var v = Task.Run(() =>
{
Thread.Sleep(1000);
return 10;
}, new CancellationToken(true).Token).Result;
Console.WriteLine(v); // this one throws
Console.Read();
}
托管线程中的取消 http://msdn.microsoft.com/en-us/library/vstudio/dd997364(v=vs.110).aspx:
取消是合作性的,不会强迫听众。侦听器确定如何优雅地终止以响应取消请求。
你没有在你的里面写任何代码Task.Run
方法来访问您的CancellationToken
并实施取消 - 因此您实际上忽略了取消请求并运行完成。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)