मैं अपनी कुछ परियोजनाओं में एसिंक्रोनस विधियों का उपयोग कर रहा हूं और मुझे यह पसंद है क्योंकि यह मेरे एप्लिकेशन को बहुत अधिक स्केलेबल होने की अनुमति देता है। हालांकि, मैं सोच रहा हूं कि एसिंक्रोनस विधियां वास्तव में पृष्ठभूमि में कैसे काम करती हैं? कैसे .NET (या Windows?) जानता है कि एक कॉल पूरा हो गया है? मेरे द्वारा बनाई गई एसिंक्रोनस कॉल की संख्या के आधार पर, मैं देख सकता हूं कि नए धागे बनाए गए हैं (हमेशा नहीं ...)। क्यूं कर?सी # में एसिंक्रोनस विधियां कैसे काम करती हैं?
इसके अतिरिक्त, मैं निगरानी करना चाहता हूं कि अनुरोध कब तक पूरा हो जाएगा। अवधारणा का परीक्षण करने के लिए, मैंने निम्न कोड लिखा है जो एक वेब सेवा को असीमित रूप से कॉल करता है और स्टॉपवॉच शुरू करने के तुरंत बाद।
for (int i = 0; i < 10000; i++)
{
myWebService.BeginMyMethod(new MyRequest(), result, new AsyncCallback(callback), i);
stopWatches[i].Start();
}
// Call back stop the stopwatch after calling EndMyMethod
यह काम नहीं करता क्योंकि सभी अनुरोधों (10000) एक ही है समय शुरू और अवधि रैखिक बढ़ जाएगी (0 फोन = अवधि 1, फोन 1 = अवधि 2, आदि)। मैं एसिंक्रोनस विधि के साथ कॉल की वास्तविक अवधि की निगरानी कैसे कर सकता हूं (उस क्षण से अनुरोध वास्तव में अंत तक निष्पादित किया जाता है)?
अद्यतन: एक अतुल्यकालिक विधि प्रवाह को ब्लॉक करता है? मैं समझता हूं कि यह .NET ThreadPool
का उपयोग करता है लेकिन कैसे IAsyncResult
जानता है कि एक कॉल पूरा हो गया है और अब CallBack
विधि को कॉल करने का समय है?
1. थ्रेडपूल, 2. थ्रेडपूल कैसे काम करता है इस बारे में विस्तार देखें लेकिन मुझे नहीं लगता कि आप जो चाहते हैं वह सामान्य तरीके से संभव है। http://msdn.microsoft.com/en-us/library/ms973903.aspx –