c# - 在 Task.Run 中使用 CancellationToken 超时不起作用

标签 c# .net task-parallel-library cancellationtokensource cancellation-token

<分区>

好的,我的问题很简单。为什么这段代码不会抛出 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();
}

最佳答案

Cancellation in Managed Threads :

Cancellation is cooperative and is not forced on the listener. The listener determines how to gracefully terminate in response to a cancellation request.

您没有在 Task.Run 方法中编写任何代码来访问您的 CancellationToken 并实现取消 - 因此您实际上忽略了取消请求并运行到完成。

关于c# - 在 Task.Run 中使用 CancellationToken 超时不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22637642/

相关文章:

c# - ASP.NET Core 中的多种身份验证方案

c# - 如何处理 Form 上的大量控件?

c# - 我应该使用什么形式的任务控制来使用 SignalR 处理 MVC 中长时间运行的进程

c# - 如何获取 Active Directory 组中的组列表

c# - 如何跨多台机器(如渲染农场)运行 C# Task Parallel Library?

c# - 在不丢失格式的情况下更改 richtextbox 的字体

c# - Windows 窗体复选框已更改还是已更新?

c# - 库中的 ConfigureAwait(false) 是否会丢失调用应用程序的同步上下文?

c# - ParallelOptions.CancellationToken 似乎没用

c# - 如何在 C# 中为计时器实现任务异步?