คำถามติดแท็ก cancellation-token

4
โทเค็นการยกเลิกในตัวสร้างงาน: เพราะอะไร
ตัวSystem.Threading.Tasks.Taskสร้างบางตัวใช้CancellationTokenเป็นพารามิเตอร์: CancellationTokenSource source = new CancellationTokenSource(); Task t = new Task (/* method */, source.Token); สิ่งที่ทำให้ฉันงุนงงเกี่ยวกับเรื่องนี้ก็คือไม่มีทางจากภายในร่างกายวิธีการที่จะได้รับจริงผ่านโทเค็น (เช่นไม่มีอะไรเหมือนTask.CurrentTask.CancellationToken) ต้องให้โทเค็นผ่านกลไกอื่น ๆ เช่นวัตถุสถานะหรือถ่ายในแลมบ์ดา ดังนั้นจุดประสงค์ในการให้โทเค็นการยกเลิกในตัวสร้างใช้เพื่ออะไร

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

6
พารามิเตอร์ดีฟอลต์สำหรับ Can CancelToken
ฉันมีรหัส async บางอย่างที่ผมอยากจะเพิ่มCancellationTokenไป แต่มีการใช้งานจำนวนมากที่นี้ไม่จำเป็นต้องดังนั้นผมจึงอยากมีพารามิเตอร์เริ่มต้น - CancellationToken.Noneบางที อย่างไรก็ตาม Task<x> DoStuff(...., CancellationToken ct = null) ผลตอบแทน ไม่สามารถใช้ค่าประเภท '' เป็นพารามิเตอร์เริ่มต้นได้เนื่องจากไม่มีการแปลงมาตรฐานให้พิมพ์ 'System.Threading.CancellationToken' และ Task<x> DoStuff(...., CancellationToken ct = CancellationToken.None) ค่าพารามิเตอร์เริ่มต้นสำหรับ 'ct' ต้องเป็นค่าคงที่เวลาคอมไพล์ มีวิธีใดบ้างที่จะมีค่าเริ่มต้นสำหรับCancellationToken?
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.