簡體   English   中英

使用 ASP.NET Core2.2 中的 CancellationToken 取消內部任務

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

我有一個包含無限循環的方法。 我從 main 方法調用該方法,如果需要超過 2 秒,我想取消它。 我嘗試了這些方法

Task.WhenAny 取消未完成的任務和超時

如何取消 Task.WhenAll?

如何使用 CancellationToken 取消任務並等待 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");
   }
}

我也嘗試取消我的令牌,但沒有成功。 無法 Dispose task 我無權訪問RunTask源代碼。 我只能運行它。 我無法將CancellationToken發送到我的方法。 如何終止RunTask()方法?

取消令牌是一種請求取消的方式。 由正在運行的代碼來接受該請求並實際停止工作。 這不像殺死一個進程。 例如,如果你有類似的東西:

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

然后,當它被取消時,循環將結束。 但是,鑒於當前代碼沒有提供任何取消方法並且您無法修改它,因此無法取消它。

這種方法怎么樣:

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");
   }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM