दूसरी विधि, Task.Run
.NET फ्रेमवर्क के एक बाद के संस्करण (.NET 4.5 में) में पेश की गई है।
हालांकि, पहली विधि, Task.Factory.StartNew
आपको उस थ्रेड के बारे में बहुत सारी उपयोगी चीजों को परिभाषित करने का अवसर देती है, जबकि आप बनाना चाहते हैंTask.Run
यह प्रदान नहीं करता है।
उदाहरण के लिए, हम कहते हैं कि आप एक लंबे समय तक चलने वाला कार्य सूत्र बनाना चाहते हैं। यदि इस कार्य के लिए थ्रेड पूल का उपयोग किया जा रहा है, तो इसे थ्रेड पूल का दुरुपयोग माना जा सकता है।
इससे बचने के लिए आप एक काम कर सकते हैं, वह यह है कि कार्य को एक अलग धागे में चलाना होगा। एक नया बनाया गया धागा जो इस कार्य के लिए समर्पित होगा और एक बार आपका कार्य पूरा हो जाने के बाद नष्ट हो जाएगा। आप इसे प्राप्त नहींTask.Run
कर सकते, जबकि आप Task.Factory.StartNew
नीचे के साथ ऐसा कर सकते हैं :
Task.Factory.StartNew(..., TaskCreationOptions.LongRunning);
जैसा कि यहाँ कहा गया है :
तो, .NET फ्रेमवर्क 4.5 डेवलपर पूर्वावलोकन में, हमने नया टास्क शुरू किया है। यह किसी भी तरह से Task.Factory.StartNew का पालन नहीं करता है,
बल्कि मापदंडों के एक समूह को निर्दिष्ट करने की आवश्यकता के बिना
Task.Factory.StartNew का उपयोग करने के लिए एक त्वरित तरीका के रूप में सोचा जाना चाहिए । यह एक शॉर्टकट है। वास्तव में, Task.Run वास्तव में Task.Factory.StartNew के लिए उपयोग किए गए उसी तर्क के संदर्भ में लागू किया गया है, बस कुछ डिफ़ॉल्ट मापदंडों में गुजर रहा है। जब आप कार्य को पास करते हैं।
Task.Run(someAction);
यह इसके बराबर है:
Task.Factory.StartNew(someAction,
CancellationToken.None, TaskCreationOptions.DenyChildAttach, TaskScheduler.Default);
StartNew
डिफ़ॉल्ट उपयोगों द्वारा होती हैTaskScheduler.Current
जो थ्रेड पूल हो सकता है लेकिन यूआई थ्रेड भी हो सकता है।