मैं हाल ही में एसिंक/प्रतीक्षा के बारे में पढ़ रहा था और मैं इस तथ्य से उलझन में हूं कि कई लेख/पोस्ट मैं पढ़ रहा था कि एसिंक प्रतीक्षा (Example) का उपयोग करते समय नया धागा नहीं बनाया गया है।async/अलग थ्रेड आईडी
मैं इसे निम्नलिखित कोड का
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Main: " + Thread.CurrentThread.ManagedThreadId);
MainAsync(args).Wait();
Console.WriteLine("Main End: " + Thread.CurrentThread.ManagedThreadId);
Console.ReadKey();
}
static async Task MainAsync(string[] args)
{
Console.WriteLine("Main Async: " + Thread.CurrentThread.ManagedThreadId);
await thisIsAsync();
}
private static async Task thisIsAsync()
{
Console.WriteLine("thisIsAsyncStart: " + Thread.CurrentThread.ManagedThreadId);
await Task.Delay(1);
Console.WriteLine("thisIsAsyncEnd: " + Thread.CurrentThread.ManagedThreadId);
}
}
आउटपुट का परीक्षण करने के लिए एक सरल सांत्वना एप्लिकेशन बनाया है है:
Main: 8
Main Async: 8
thisIsAsyncStart: 8
thisIsAsyncEnd: 9
Main End: 8
मैं बात को अनदेखा कर रहा हूँ, या thisIsAsyncEnd अन्य की तुलना में अलग थ्रेड ID रहा है कार्रवाई?
संपादित करें:
मैं कोड के रूप में await Task.Delay(1)
लिए नीचे दिए गए जवाब में सुझाव दिया, लेकिन मैं अभी भी एक ही परिणाम देख रहा हूँ अद्यतन किया है।
नीचे जवाब से उद्धरण:
Rather, it enables the method to be split into multiple pieces, some of which may run asynchronously
मैं कहाँ asynchronously
हिस्सा रन करता है पता करने के लिए, अगर वहाँ बनाया कोई अन्य सूत्र हैं करना चाहते हैं? यदि यह एक ही थ्रेड पर चलता है, तो इसे लंबे I/O अनुरोध के कारण इसे अवरुद्ध नहीं करना चाहिए, या कंपाइलर उस क्रिया को किसी अन्य थ्रेड पर ले जाने के लिए पर्याप्त स्मार्ट है, यदि यह बहुत लंबा लगता है, और सभी के बाद एक नया धागा उपयोग किया जाता है?
धन्यवाद, मैं इसे सही उत्तर में बदल दूंगा क्योंकि इसमें अधिक जानकारी है, और यह पिछले जवाब को गलत बना रहा है। – Robert
बहुत बढ़िया जवाब। बहुत ज्यादा अधिमूल्यित। – gottlieb76
@StephenCleary तो जब निष्पादन 'मुख्य' तक पहुंच जाता है तो यह प्रतीक्षा कर रहा है (या निष्पादन रोकता है)। क्या यह इस आईएसएसिंक में निरंतरता (मुख्य धागे में निष्पादन रोक के बाद) थ्रेड पूल में धागे द्वारा उठाया जाता है और इसे निष्पादित करता है? साथ ही, निष्पादन थ्रेड पूल (या यूआई ऐप में मुख्य धागा) से अलग थ्रेड में निरंतरता को कैसे शुरू करता है? –