【发布时间】:2017-10-10 22:07:55
【问题描述】:
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# 中的 cancelTokens 的概念。我知道上面的代码不会打印“Hello from Task”,因为在任务运行之前会检查令牌。
不过我有几个问题。
Task.Run(() => Console.WriteLine("Hello from Task"), token);
上面的语句是什么意思?从某种意义上说,它与简单地调用 Console.WriteLine("Hello from Task") 有何不同?只是我们可以通过传递令牌来取消Task吗?还有Task.Run开头的空括号()是什么意思?
- 如何更改上述代码,以便及时停止特定实例的执行。
【问题讨论】:
-
“只是我们能够通过传递令牌来取消任务” - 不,任务中的代码必须在运行时检查取消令牌,如果请求取消则退出。任务不会因为有取消请求而神奇地停止。
-
这与标记为重复的问题实际上不是同一个问题,即使它们具有相同的标题。问题的内容和提出的具体问题不同。
标签: c# cancellationtokensource cancellation-token