Functional Programming For Everyday .NET Development में जेरेमी मिलर के अच्छे काम के लिए धन्यवाद, मेरे पास एक वर्किंग कमांड एक्जिक्यूटर है जो मैं चाहता हूं कि वह सब कुछ करे (थ्रेड पूल पर भारी उठाना, परिणाम भेजना या सिंक्रनाइज़ेशन संदर्भ में त्रुटियों को वापस भेजना, और यहां तक कि प्रगति को वापस पोस्ट करना सिंक्रनाइज़ेशन संदर्भ), लेकिन मैं समझा नहीं सकता कि यह थ्रेड-पूल से SynchronizationContext.Send का उपयोग क्यों करता है और Func
से भारी उठाने की विधि में पारित किया गया है। मैंने प्रलेखन को कई बार पढ़ा है, लेकिन अंतर में क्या है इसके लिए मुझे सिर्फ आंत महसूस नहीं हो सकता है। मुझे इस तथ्य से क्या प्राप्त होना चाहिए कि किसी को Send
कहा जाता है और इसे Post
कहा जाता है? मैं समझ जादू तथ्य Send
में है और Post
"एक तुल्यकालिक अनुरोध शुरू होता है" "एक अतुल्यकालिक अनुरोध शुरू होता है", लेकिन दोनों अनुरोध थ्रेड पूल से आते हैं और भेजे जाने के लिए/वापस यूआई धागा करने के लिए तैनात की जरूरत है।सिंक्रनाइज़ेशन कॉन्टेक्स्ट सैंड और सिंक्रनाइज़ेशन कॉन्टेक्स्ट.पोस्ट के बीच क्या अंतर है?
क्या कोई अंतर बता सकता है, भले ही यह केवल एक निमोनिक डिवाइस है जो मुझे बताता है कि एक दूसरे को चुनने के लिए कब? से _ExecuteCommand
विधि नीचे command
पैरामीटर के रूप में पारित हो जाता है
private Action _ExecuteCommand
(SynchronizationContext context
, Action<int, int> progress
, Action<int, int> after)
{
int count = 3;
int accumulatedValue = 0;
int threadId = Thread.CurrentThread.ManagedThreadId;
for (int i = 0; i < count; i++)
{
Thread.Sleep(1000);
context.Post(delegate { progress(i + 1, threadId); });
accumulatedValue += i;
}
return() => after(threadId, accumulatedValue);
}
यही कारण है, ज्यादातर:
मामले यह मायने रखता है में, यह मेरी परीक्षण कोड जहाँ मैं Post
का उपयोग प्रगति UI पर वापस भेजने के लिए है मूल लेख, Send
का उपयोग करता है पूरा होने और त्रुटि संदेश UI पर वापस भेजने के लिए:
public void Execute(Func<Action> command, Action<Exception> error)
{
ThreadPool.QueueUserWorkItem(o =>
{
try
{
Action continuation = command();
_Context.Send(s => continuation());
}
catch (Exception e)
{
_Context.Send(s => error(e));
}
});
}
वे वास्तव में बुरी तरह से नामित तरीके हैं। –