如何取消Async操作

小樊
107
2024-06-17 23:55:59

要取消一個(gè)異步操作,可以使用以下方法之一:

  1. 使用CancellationToken:在開(kāi)始異步操作時(shí),傳入一個(gè)CancellationToken參數(shù),并在取消操作時(shí)調(diào)用該token的Cancel方法。在異步操作中檢查token是否已取消,如果是則立即停止操作。
CancellationTokenSource cts = new CancellationTokenSource();
CancellationToken token = cts.Token;

// 開(kāi)始異步操作
Task.Run(async () => 
{
    await YourAsyncOperation(token);
}, token);

// 取消操作
cts.Cancel();
  1. 使用TaskCancellationSource:創(chuàng)建一個(gè)TaskCancellationSource對(duì)象,通過(guò)調(diào)用該對(duì)象的Cancel方法來(lái)取消異步操作。在異步操作中通過(guò)調(diào)用ThrowIfCancellationRequested方法來(lái)檢查是否已取消。
TaskCancellationSource cts = new TaskCancellationSource();

// 開(kāi)始異步操作
Task.Run(async () => 
{
    await YourAsyncOperation();
}, cts.Token);

// 取消操作
cts.Cancel();
  1. 使用Timeout:在異步操作中設(shè)置一個(gè)超時(shí)時(shí)間,在超時(shí)后停止操作。
Task.Run(async () => 
{
    await Task.Delay(5000); // 模擬異步操作

    if (cts.Token.IsCancellationRequested)
    {
        // 已取消操作
        return;
    }

    // 繼續(xù)執(zhí)行操作
}, cts.Token);

// 取消操作
cts.Cancel();

無(wú)論使用哪種方法,都需要在異步操作中檢查是否已取消,以確保及時(shí)停止操作。

0