ฉันกำลังมองหาเหตุผลว่าทำไม. NET CancellationToken
struct จึงถูกนำมาใช้นอกเหนือจากCancellationTokenSource
คลาส ฉันเข้าใจวิธีการใช้ API แต่ต้องการเข้าใจด้วยว่าเหตุใดจึงออกแบบมาเช่นนั้น
กล่าวคือทำไมเราถึงมี:
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
สามารถติดตามและอัปเดตCancellationTokens
และสำหรับแต่ละโทเค็นการตรวจสอบการยกเลิกคือการเข้าถึงฟิลด์ภายในหรือไม่?
เนื่องจากบูลที่ระเหยได้โดยไม่มีการล็อคก็เพียงพอแล้วในทั้งสองกรณีฉันยังไม่เห็นว่าทำไมถึงเร็วขึ้น
ขอบคุณ!