2017-03-29 12 views
9

एक कार्य वास्तव में कब शुरू होता है?एक सी # कार्य वास्तव में कब शुरू होता है?

public void DoSomething() { 
    Task myTask = DoSomethingAsync(); 

    Task.WaitAll(new[] { myTask }, 2000); 
} 

public async Task DoSomethingAsync() { 
    await SomethingElse(); 
} 

यह तुरंत शुरू होता है, जब यह Task myTask = DoSomethingAsync(); में आरंभ या यह है जब आप Task.WaitAll(new[] { myTask }, 2000); में इसके लिए प्रतीक्षा करने के लिए कहते हैं कि शुरू होता है?

+1

यह एक बड़ा सवाल है। शुरुआत करने वालों के लिए यहां एक नज़र डालें: http://blog.stephencleary.com/2013/11/there-is-no-thread.html –

+1

क्या आपने पहले से ही कोई शोध किया है? – PJvG

+1

@PJvG हां, ज़ाहिर है। कोई संतोषजनक उत्तर नहीं मिला। – GTHvidsten

उत्तर

10

async विधि को कॉल करने से गर्म कार्य, एक कार्य जो पहले ही शुरू हो चुका है। तो इसे चलाने के लिए मजबूर करने के लिए आवश्यक कोई वास्तविक कोड नहीं है।

एमएसडीएन (thanks to Stephen Cleary) कार्य-आधारित असिंक्रोनस पैटर्न (टीएपी) पैटर्न requires returned tasks to be hot के अनुसार। इसका मतलब है कि new Task के साथ बनाए गए सभी कार्यों को गर्म कर दिया जाएगा।

संदर्भित लेख से:

कार्य सार्वजनिक Task कंस्ट्रक्टर्स द्वारा बनाई गई हैं कि ठंड के रूप में कार्य करने के लिए भेजा रहे हैं ... अन्य सभी कार्यों को एक गर्म राज्य में अपने जीवन चक्र शुरू करते हैं।

+0

अंतर जानने के लिए खुशी – Charlesliam

+1

"जब आप एक विधि को कॉल करते हैं जो एसिंक के बिना कार्य देता है, तो यह शुरू नहीं होगा।" मुझे थोड़ा उलझन में लग रहा है। एसिंक के बिना कार्य वापस करने वाली अधिकांश विधियां अभी भी कार्य शुरू कर चुकी हैं जो पहले ही शुरू हो चुकी हैं, क्योंकि वे इसे विधि के भीतर ही शुरू करते हैं। – Evk

+0

@Evk 'स्वचालित'> बेहतर? –

संबंधित मुद्दे