为什么我应该在调用 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()
通常被认为是推荐的选项。
这里是 source code of the ThrowIfCancellationRequested
方法:
public void ThrowIfCancellationRequested()
{
if (IsCancellationRequested)
ThrowOperationCanceledException();
}
很明显,在调用此方法之前检查 IsCancellationRequested
属性 毫无用处,除了将少量电能转化为热能。
我经常看到下面的代码,第一个视图看起来不错,因为它用于在执行其他操作之前检查先决条件。
但是当一个人读到方法的名称时,感觉前面的 if 语句已经包含在方法本身中了。那么是否有任何理由像本例中那样编写代码,或者可以直接跳过 if 语句和 运行 ThrowIfCancellationRequested
。
当然如果需要在退出前进行清理那就另当别论了,我完全理解if语句的用法
if (cancellationToken.IsCancellationRequested)
{
cancellationToken.ThrowIfCancellationRequested();
}
简而言之:没有理由同时检查两者。
cancellationToken.ThrowIfCancellationRequested()
和 cancellationToken.IsCancellationRequested
是实现相同目标的不同方法。
检查 cancellationToken.IsCancellationRequested
是一种所谓的“软”取消任务的方式。
设置 cancellationToken.ThrowIfCancellationRequested()
通常被认为是推荐的选项。
这里是 source code of the ThrowIfCancellationRequested
方法:
public void ThrowIfCancellationRequested()
{
if (IsCancellationRequested)
ThrowOperationCanceledException();
}
很明显,在调用此方法之前检查 IsCancellationRequested
属性 毫无用处,除了将少量电能转化为热能。