本文介绍了在Task.Run中使用CancellationToken进行超时不起作用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
好的,我的问题很简单。为什么这段代码不会抛出 TaskCancelledException
?
OK, my questions is really simple. Why this code does not throw 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();
}
推荐答案
:
您没有在<$ c $内编写任何代码c> Task.Run 方法来访问您的 CancellationToken
并实施取消-这样您就有效地忽略了取消请求并运行到完成。
You didn't write any code inside your Task.Run
method to access your CancellationToken
and to implement cancellation - so you effectively ignored the request for cancellation and ran to completion.
这篇关于在Task.Run中使用CancellationToken进行超时不起作用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!