C#报”TaskCanceledException”的原因以及解决办法

  • Post category:C#

首先,TaskCanceledException是在异步操作被取消时(如调用取消令牌的Cancel方法或者超时)抛出的异常。这种异常通常表示异步操作被取消而未完成。

解决办法:

  1. 使用异步等待(await)并包装在try-catch块中,在catch块中捕获TaskCanceledException并处理。
try
{
    await Task.Delay(5000, cancellationToken);
}
catch (TaskCanceledException)
{
    // 异步操作已被取消,这里可以进行相应的处理
}
  1. 在异步操作中使用传入的取消令牌(cancellationToken)进行控制。
public async Task DownloadFile(string url, CancellationToken cancellationToken)
{
    using (var client = new HttpClient())
    {
        using (var response = await client.GetAsync(url, cancellationToken))
        {
            // 如果使用 CancelTokenSource 在下载过程中调用 Cancel(),则会抛出 TaskCanceledException 异常
            await response.Content.ReadAsStringAsync();
        }
    }
}

在以上两个示例中,我们都使用了传入的取消令牌进行控制,若在异步操作期间接收到了取消令牌的通知,则会抛出TaskCanceledException异常,代码中我们可以在catch块中进行相应的处理,比如释放资源、记录日志等等。