पर कॉल करता हूं, मुझे आईओसीपी के बारे में कुछ पता है, लेकिन मैं एपीएम के साथ थोड़ा उलझन में हूं।, दो धागे हैं जब मैं BeginXXX
static FileStream fs;
static void Main(string[] args)
{
fs = new FileStream(@"c:\bigfile.txt", FileMode.Open);
var buffer = new byte[10000000];
IAsyncResult asyncResult = fs.BeginRead(buffer, 0, 10000000, OnCompletedRead, null);
Console.WriteLine("async...");
int bytesRead = fs.EndRead(asyncResult);
Console.WriteLine("async... over");
}
static void OnCompletedRead(IAsyncResult ar)
{
Console.WriteLine("finished");
}
मुझे आश्चर्य है, पढ़ने के लिए कार्रवाई एक आईओ धागा एसिंक्रोनस रूप द्वारा निष्पादित है? या एक थ्रेड पूल में एक कार्यकर्ता धागा?
और कॉलबैक फ़ंक्शन OnCompletedRead
, क्या इसे सीएलआर थ्रेड पूल में आईओ थ्रेड द्वारा भी निष्पादित किया गया है?
क्या ये दो धागे एक ही हैं? यदि नहीं, तो दो धागे उत्पन्न होते हैं, एक पढ़ी कार्रवाई निष्पादित करता है और दूसरा कॉलबैक करता है।
आपको 'Main' के अंदर 'EndReceive' को कॉल नहीं करना चाहिए। आपको इसे 'ऑनकंपलेट रीड' में कॉल करना चाहिए अन्यथा आपको एसिंक कॉल के किसी भी लाभ नहीं मिल रहे हैं। –
मैं http://blog.stephencleary.com/2013/11/there-is-no-thread.html –
पढ़ने की भी सिफारिश करता हूं, मैंने उस ब्लॉग को पढ़ा। तो पढ़ने की प्रक्रिया को संसाधित करने के लिए कोई धागा नहीं है। लेकिन कॉलबैक आईओ थ्रेड पर निष्पादित करता है, क्या मैं सही हूँ? –