クラスCancellationToken
に加えて.NET 構造体が導入された理由の根拠を探しています。API の使用方法CancellationTokenSource
は理解していますが、そのように設計されている理由も理解したいと考えています。
つまり、なぜ私たちは持っているのですか:
var cts = new CancellationTokenSource();
SomeCancellableOperation(cts.Token);
...
public void SomeCancellableOperation(CancellationToken token) {
...
token.ThrowIfCancellationRequested();
...
}
次のように直接渡す代わりにCancellationTokenSource
:
var cts = new CancellationTokenSource();
SomeCancellableOperation(cts);
...
public void SomeCancellableOperation(CancellationTokenSource cts) {
...
cts.ThrowIfCancellationRequested();
...
}
これは、トークンを渡すよりもキャンセル状態のチェックが頻繁に行われるという事実に基づくパフォーマンスの最適化ですか?
それで、それCancellationTokenSource
は と update を追跡できCancellationTokens
、各トークンのキャンセルチェックはローカルフィールドアクセスですか?
どちらの場合も、ロックのない volatile bool で十分であることを考えると、なぜそれが高速になるのかはまだわかりません。
ありがとう!