3

在沒有構建快速測試牀的情況下;我想我很快就會問,看看有沒有人知道這個答案。CancellationToken - 取消請求後的註冊處理程序

加上它可能誰可能會遇到類似的情況告知其他用戶的好處..

比方說,我有一個長期生活CancellationTokenSource有許多許多不同的組件上的CancellationToken註冊處理。

如果要求取消並且已註冊的回調都被調用,然後在該點之後註冊另一個處理程序;在註冊時,取消回叫仍然會觸發新的回叫嗎?

提前歡呼!

回答

7

看看文檔爲CancellationToken.Register

如果此令牌已經處於取消狀態,代表將立即同步是 運行。代理 生成的任何異常都將傳播出此方法調用。

當前ExecutionContext(如果存在)將與 委託一起捕獲,並在執行時使用。

考慮以下幾點:

void RegisterBeforeCancel(CancellationToken token) 
{ 
    token.Register(() => Console.WriteLine("Before cancel")); 
} 

void RegisterAfterCancel(CancellationToken token) 
{ 
    token.Register(() => Console.WriteLine("After cancel")); 
} 

var cts = new CancellationTokenSource(); 

RegisterBeforeCancel(cts.Token); 

cts.Cancel(); 

RegisterAfterCancel(cts.Token); 

輸出將顯示:

Before cancel 
After cancel 
相關問題