วิธีที่สองTask.Run
ได้รับการแนะนำใน. NET Framework รุ่นที่ใหม่กว่า (ใน. NET 4.5)
อย่างไรก็ตามวิธีแรกTask.Factory.StartNew
ให้โอกาสคุณในการกำหนดสิ่งที่มีประโยชน์มากมายเกี่ยวกับเธรดที่คุณต้องการสร้างในขณะที่Task.Run
ไม่ได้ให้สิ่งนี้
ตัวอย่างเช่นสมมติว่าคุณต้องการสร้างเธรดงานที่ใช้งานมานาน หากเธรดของเธรดพูลจะถูกใช้สำหรับงานนี้สิ่งนี้อาจถูกพิจารณาว่าเป็นการละเมิดเธรดพูล
สิ่งหนึ่งที่คุณสามารถทำได้เพื่อหลีกเลี่ยงปัญหานี้คือการเรียกใช้งานในเธรดแยกต่างหาก เธรดที่สร้างขึ้นใหม่ที่จะทุ่มเทให้กับงานนี้และจะถูกทำลายเมื่องานของคุณจะเสร็จสมบูรณ์ คุณไม่สามารถทำสิ่งนี้ได้ด้วยในTask.Run
ขณะที่คุณสามารถทำได้ด้วยTask.Factory.StartNew
เช่น:
Task.Factory.StartNew(..., TaskCreationOptions.LongRunning);
ตามที่ระบุไว้ที่นี่ :
ดังนั้นใน. NET Framework 4.5 Developer Preview เราได้แนะนำวิธีการ Task.Run ใหม่ สิ่งนี้ไม่ทำให้ล้าสมัย Task.Fartory.StartNew
แต่ควรคิดว่าเป็นวิธีที่รวดเร็วในการใช้งาน
Task.Fartory.StartNew โดยไม่จำเป็นต้องระบุพารามิเตอร์จำนวนมาก มันเป็นทางลัด ในความเป็นจริง Task.Run ถูกนำไปใช้จริงในแง่ของตรรกะเดียวกันที่ใช้สำหรับ Task.Factory.StartNew เพียงแค่ผ่านพารามิเตอร์เริ่มต้นบางอย่าง เมื่อคุณผ่านการดำเนินการไปยังงาน Run:
Task.Run(someAction);
นั่นเทียบเท่ากับ:
Task.Factory.StartNew(someAction,
CancellationToken.None, TaskCreationOptions.DenyChildAttach, TaskScheduler.Default);
StartNew
โดยค่าเริ่มต้นใช้TaskScheduler.Current
ซึ่งอาจเป็นเธรดพูล แต่อาจเป็นเธรด UI