首页 > 解决方案 > 为什么我应该在调用 ThrowIfCancellationRequested() 之前检查 IsCancellationRequested

问题描述

我经常看到以下代码,这是第一个看起来不错的代码,因为它用于在执行其他操作之前检查先决条件。

但是当人们阅读方法的名称时,感觉就像前面的 if 语句已经包含在方法本身中一样。那么是否有任何理由像本示例中那样编写代码,或者可以跳过 if 语句并ThrowIfCancellationRequested直接运行。

当然,如果需要在退出之前进行清理,那是另一回事,那么我完全理解 if 语句的使用。

if (cancellationToken.IsCancellationRequested)
{
    cancellationToken.ThrowIfCancellationRequested();
}

标签: c#taskcancellation-token

解决方案


简而言之:没有理由同时检查两者。

cancellationToken.ThrowIfCancellationRequested()并且cancellationToken.IsCancellationRequested是实现相同目标的不同方法。

检查cancellationToken.IsCancellationRequested是取消任务的所谓“软”方式。

设置cancellationToken.ThrowIfCancellationRequested()通常被认为是推荐的选项。

您可以在此处此处找到有关正确取消任务的更多信息。


推荐阅读