हमारे पास यह आम परिदृश्य है जहां हमारे पास एक ऐसी विधि है जो कुछ क्रियाओं को असीम तरीके से करती है और जब यह हो जाती है तो एक ईवेंट उठाता है।क्या एसिंक्रोनस विधि सिंक्रनाइज़ करने का एक सामान्य तरीका है?
ManualResetEvent reset = new ManualResetEvent(false);
someobject.AsyncActionDone += (sender, args) => reset.Set();
someobject.PerformAsyncAction();
reset.WaitOne();
वहाँ एक तरीका यह है एक सहायक विधि लिखने के लिए है:
बार जहाँ हम चाहते हैं कि उसे तुल्यकालिक बजाय तो हम कोड है कि इस के समान दिखता है किया हैं? मैं प्रदर्शन करने के लिए क्रिया में पास कर सकता हूं, लेकिन मुझे यकीन नहीं है कि कुछ ऐसा कैसे किया जाए जिससे सहायक विधि को यह पता चल सके कि कौन सी घटना सुननी है क्योंकि ऐसा नहीं लगता है कि आप एक इवेंट हैंडलर को पैरामीटर के रूप में पास कर सकते हैं।
अधिमानतः एक समाधान है कि प्रतिबिंब की आवश्यकता नहीं है
वहाँ कुछ भ्रम हो रहा है, यह क्या someobject की कक्षा का एक नमूना है की तरह है:
public class SomeClass
{
private ExternalServer someServerOverTheNetwork = new ExternalServer();
public event EventHandler AsyncActionDone;
public Data SomeData { get; set; }
public void PerformAsyncAction()
{
someServerOverTheNetwork.GetSomeData(OnDataRetrived);
}
public Data OnDataRetrived(Data someData)
{
AsyncActionDone(this, new DataEventArgs(someData));
}
}
क्या आप किसी चीज़ के कार्यान्वयनकर्ता हैं या क्या यह एक पुस्तकालय प्रकार है जिसे संशोधित नहीं किया जा सकता है? –
हम हैं, हालांकि ऐसी कई वस्तुएं हैं। अधिकांश कार्यों में सर्वर से अनुरोध भेजने और परिणाम वापस आने का इंतजार करना शामिल है, इसलिए वे डिफ़ॉल्ट रूप से एसिंक क्यों हैं। – Davy8
हमारे पास सर्वर से ऑब्जेक्ट्स की एक सूची को कैश करने, हमारे सबसे सामान्य कार्यों में से एक के लिए ऐसा करने का एक तरीका है, हालांकि यह सटीक ऑब्जेक्ट प्रकार और सुनने के लिए ईवेंट को जानने पर निर्भर करता है। मैं किस घटना को सुनने में सक्षम होना चाहता हूं ताकि हम डुप्लिकेट कोड को कम कर सकें, क्योंकि केवल उन्हीं चीज़ों को अलग करना है जो पूरा होने पर उठाए गए तरीके और घटना हैं। – Davy8