在 ASP.NET Core2.2 中使用 CancellationToken 取消内部任务

Cancel an internal task using CancellationToken in ASP.NET Core2.2

我有一个包含无限循环的方法。我从 main 方法调用该方法,如果它花费的时间超过 2 秒,我想取消它。 我尝试了这些方法

How can I cancel Task.WhenAll?

How to cancel a task using a CancellationToken and await Task.WhenAny

和许多其他链接,但没有一个有效。 这是我的代码

static void Main(string[] args)
{
   var cts = new CancellationTokenSource(2000);   
   var task = Task.Run(() => RunTask(), cts.Token);
   await task;
}

public static void RunTask()
{
   while (true)
   {
     Console.WriteLine("in while");
   }
}

我也试过取消我的令牌,但没有成功。 无法处理 task。 我无权访问 RunTask 源代码。我可以 运行 它。 我无法将 CancellationToken 发送到我的方法。如何终止 RunTask() 方法?

这种方法怎么样:

static void Main(string[] args)
{
   var cts = new CancellationTokenSource(2000);   
   var task = Task.Run(() => RunTask(cts.Token), cts.Token);
   await task;
}

public static void RunTask(CancellationToken token)
{
   while (!token.IsCancellationRequested)
   {
     Console.WriteLine("in while");
   }
}

取消令牌是一种请求取消的方式。 运行 代码接受该请求并实际停止工作。这不像杀死一个进程。例如,如果您有类似的内容:

public static void RunTask(CancellationToken cancellationToken)
{
   while (!cancellationToken.IsCancellationRequested)
   {
     Console.WriteLine("in while");
   }
}

然后,当它被取消时,循环将结束。但是,鉴于目前的代码没有提供任何取消的方法,你也不能修改它,那么就没有办法取消它。