为什么我应该在调用 ThrowIfCancellationRequested() 之前检查 IsCancellationRequested

Why should I check IsCancellationRequested before calling ThrowIfCancellationRequested()

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

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

当然如果需要在退出前进行清理那就另当别论了,我完全理解if语句的用法

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

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

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

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

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

您可以找到有关正确取消任务的更多信息here and here

这里是 source code of the ThrowIfCancellationRequested 方法:

public void ThrowIfCancellationRequested()
{
    if (IsCancellationRequested) 
        ThrowOperationCanceledException();
}

很明显,在调用此方法之前检查 IsCancellationRequested 属性 毫无用处,除了将少量电能转化为热能。