var task = Task.Factory.StartNew(() => { IOMethod(); });
task.Wait();
यह Wait()
की वजह से अपने वर्तमान धागा ब्लॉक जबकि IOMethod()
निष्पादित हो रहा है एक धागा पूल धागा ब्लॉक और भी होगा (svick के जवाब देखें।)। कुल अवरुद्ध धागे: 2।
var task = Task.Factory.FromAsync(BeginIOMethod, EndIOMethod, ...);
task.Wait();
हो जाएगा ताकि (सबसे अधिक संभावना) में अतुल्यकालिक एक धागा का उपयोग किए बिना कार्रवाई करने, लेकिन यह Wait()
की वजह से वर्तमान धागा रोकेंगे। कुल अवरुद्ध धागे: 1.
IOMethod();
जबकि IOMethod()
निष्पादित हो रहा है यह वर्तमान धागा रोकेंगे। कुल अवरुद्ध धागे: 1.
यदि आपको वर्तमान धागे को अवरुद्ध करने की आवश्यकता है, या यदि इसे अवरुद्ध करना आपके लिए ठीक है, तो आपको इसका उपयोग करना चाहिए, क्योंकि टीपीएल का उपयोग करने की कोशिश करने से वास्तव में आपको कुछ भी नहीं मिलेगा।
var task = Task.Factory.FromAsync(BeginIOMethod, EndIOMethod, ...);
await task;
यह अतुल्यकालिक रूप से एक धागे का उपयोग किए बिना आपरेशन प्रदर्शन करेंगे, और यह भी आपरेशन await
को अतुल्यकालिक रूप से धन्यवाद पूरा करने के लिए, इंतजार करेंगे। कुल अवरुद्ध धागे: 0.
यदि आप एसिंक्रनाइ का लाभ लेना चाहते हैं तो आप इसका उपयोग करना चाहिए और आप सी # 5.0 का उपयोग कर सकते हैं।
var task = Task.Factory.FromAsync(BeginIOMethod, EndIOMethod, ...);
task.ContinueWith(() => /* rest of the method here */);
यह अतुल्यकालिक रूप से एक धागे का उपयोग किए बिना आपरेशन प्रदर्शन करेंगे, और यह भी आपरेशन ContinueWith()
को अतुल्यकालिक रूप से धन्यवाद पूरा करने के लिए, इंतजार करेंगे। कुल अवरुद्ध धागे: 0.
यदि आप एसिंक्रनाइ का लाभ लेना चाहते हैं तो आप इसका उपयोग करना चाहिए और आप सी # 5.0 का उपयोग नहीं कर सकते हैं।
संक्षिप्त उत्तर, आप (शायद) थ्रेड पूल थ्रेड नहीं रखते हैं, वहां से 'FromAsync' का उपयोग करते समय कुछ भी नहीं कर रहे हैं, तो आप हैं यदि आप 'StartNew' का उपयोग करते हैं। यदि आप बहुत सारी चीज़ें कर रहे हैं, तो थ्रेड पूल पर जोर देना एक प्रदर्शन समस्या हो सकती है। – Servy
डुप्लिकेट: http://stackoverflow.com/questions/5018897/tpl-taskfactory-fromasync-vs-tasks-with-blocking-methods – shambulator