多次调用 CancellationTokenSource.Cancel 是否安全?

Tam*_*zma 4 c# cancellationtokensource

例如,如果我想在一个Dispose()调用中取消某个操作(可以多次调用),那么我需要写

public void Dispose()
{
    if (!cancellationTokenSource.IsCancellationRequested)
    {
        cancellationTokenSource.Cancel();
    }
}
Run Code Online (Sandbox Code Playgroud)

或者更简单的就足够了

public void Dispose()
{
    cancellationTokenSource.Cancel();
}
Run Code Online (Sandbox Code Playgroud)

(欢迎您评论在 Dispose 方法中取消事物是否明智,但这不是本问题的重点。)

Tam*_*zma 6

是的。

但CancellationTokenSource前提是尚未处置。

从参考来源:

ThrowIfDisposed();

// ...

// fast-path test to check if Notify has been called previously
if (IsCancellationRequested)
    return;
Run Code Online (Sandbox Code Playgroud)