了解C#中的取消令牌

时间:2017-10-10 22:07:55

标签: c# cancellationtokensource cancellation-token

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace CancellationTokenExperiments
{
    class CancellationTokenTest
    {
        static void Main(string[] args)
        {
            CancellationTokenSource tokenSource = new CancellationTokenSource();
            CancellationToken token = tokenSource.Token;
            tokenSource.Cancel();
            Task.Run(() => Console.WriteLine("Hello from Task"), token);

        }
    }
}

我试图理解C#中的cancellationTokens的概念。我知道上面的代码不会打印“Hello from Task”,因为在运行任务之前检查了令牌。

但是我有几个问题。

  1. Task.Run(() => Console.WriteLine("Hello from Task"), token);
  2. 上述陈述是什么意思?从某种意义上说,它与简单地调用Console.WriteLine("Hello from Task")有何不同?只是我们能够通过传递令牌来取消Task吗?另外()开头的空括号Task.Run是什么意思?

    1. 如何更改上述代码,以便我可以及时停止特定实例的执行。

1 个答案:

答案 0 :(得分:-1)

首先,空括号是没有参数的lambda表达式的语法。

() => Console.WriteLine("Hello from Task")

创建一个函数,然后将其传递给要运行的任务。

当您管理多个并发任务(通常跨线程)时,取消的值就会出现。可靠的跨线程同步和取消需要一些工作,理解多线程编程和使用取消令牌可以大大简化它并消除许多常见的初学者陷阱。

当您在后台启动较长时间的进程然后想要在完成之前取消它时,将使用该令牌。