簡體   English   中英

我是否需要創建一個新的CancellationTokenSource(); 任務取消后?

[英]Do I need to create a new CancellationTokenSource(); after a task cancel?

我有一個這樣的應用程序:

我有一個應用程序,其中部分代碼在帶有計時器延遲的循環中運行。 在應用程序開始時,我聲明:

public static CancellationTokenSource tokenSource1 = new CancellationTokenSource();
public static bool Timer1Running;

這是循環區域:

 while (App.runCardTimer && App.TimerSeconds > 0)
 {
   App.Timer1Running = true;    
   …
   try
   {
      await Task.Delay(1000, App.tokenSource2.Token);
   }
   catch (TaskCanceledException ex) { }
   App.TimerSeconds--;       
   App.Timer1Running = false;    
 }   

我的應用程序響應如下所示的屏幕單擊:

wordGrid.GestureRecognizers.Add(       
   new TapGestureRecognizer()      
   {          
      Command = new Command(() =>          
      {          
         App.TimerSeconds = 0;          
         if (App.tokenSource1 != null && App.Timer1Running)          
         {              
            App.tokenSource1.Cancel();          
         }       
      })    
   });

我對取消令牌感到困惑。 一旦我發表聲明:

App.tokenSource1.Cancel(); 

我是否需要像這樣創建一個新的取消令牌:

tokenSource1 = new CancellationTokenSource();

還是我可以繼續重復使用?

如果要重置取消令牌的狀態,則無法執行此操作。 您必須重新創建CancellationTokenSource

CancellationToken和任務都是一次性實體,使用后應丟棄。

您的基本方法是:

  • 創建CancellationTokenSource ;
  • 觸發任務並將其傳遞給CancellationToken
  • 等待任務完成,取消或失敗;
  • 如果需要重復操作,請轉到第一個列表項。

暫無
暫無

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

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