คำถามติดแท็ก parallel-extensions

4
Parallel.ForEach เทียบกับ Task.Fartory.StartNew
ความแตกต่างระหว่างตัวอย่างโค้ดด้านล่างคืออะไร ทั้งสองจะไม่ใช้เธรดพูลหรือไม่ เช่นถ้าฉันต้องการเรียกใช้ฟังก์ชันสำหรับแต่ละรายการในคอลเลกชัน Parallel.ForEach<Item>(items, item => DoSomething(item)); vs foreach(var item in items) { Task.Factory.StartNew(() => DoSomething(item)); }

7
เมื่อใดจึงจะยกเลิก CancellationTokenSource
ชั้นเรียนCancellationTokenSourceเป็นแบบใช้แล้วทิ้ง การดูอย่างรวดเร็วใน Reflector พิสูจน์การใช้งานKernelEventซึ่งเป็นทรัพยากรที่ไม่มีการจัดการ (มีโอกาสมาก) เนื่องจากCancellationTokenSourceไม่มี finalizer หากเราไม่ได้กำจัด GC จะไม่ทำเช่นนั้น ในทางกลับกันถ้าคุณดูตัวอย่างที่แสดงอยู่ในบทความ MSDN การยกเลิกในเธรดที่ได้รับการจัดการมีเพียงข้อมูลโค้ดเดียวเท่านั้นที่ใช้โทเค็น เป็นวิธีที่เหมาะสมในการกำจัดมันในรหัสอะไร คุณไม่สามารถตัดโค้ดเพื่อเริ่มงานคู่ขนานของคุณได้usingหากคุณไม่รอ และมันก็สมเหตุสมผลที่จะยกเลิกหากคุณไม่รอ แน่นอนว่าคุณสามารถเพิ่มContinueWithงานด้วยการDisposeโทร แต่นั่นเป็นวิธีที่จะไปไหม? แล้วแบบสอบถาม PLINQ ที่ยกเลิกได้ซึ่งไม่ซิงโครไนซ์ย้อนกลับ แต่ทำอะไรได้บ้างในตอนท้าย สมมติว่า.ForAll(x => Console.Write(x))อย่างไร มันสามารถใช้ซ้ำได้หรือไม่ สามารถใช้โทเค็นเดียวกันสำหรับการโทรหลายครั้งแล้วทิ้งพร้อมกับส่วนประกอบโฮสต์สมมติว่าการควบคุม UI ได้หรือไม่ เนื่องจากมันไม่มีResetวิธีการล้างข้อมูลIsCancelRequestedและTokenฟิลด์ฉันคิดว่ามันไม่สามารถใช้ซ้ำได้ดังนั้นทุกครั้งที่คุณเริ่มงาน (หรือแบบสอบถาม PLINQ) คุณควรสร้างใหม่ มันจริงหรอ? ถ้าใช่คำถามของฉันคือกลยุทธ์ที่ถูกต้องและแนะนำในการจัดการกับอินสแตนซ์Disposeเหล่านั้นCancellationTokenSourceคืออะไร?
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.