मेरे पास एक निर्माता/उपभोक्ता कतार है, सिवाय इसके कि विशिष्ट प्रकार की वस्तुएं हैं। इसलिए कोई भी उपभोक्ता एक अतिरिक्त वस्तु का उपभोग नहीं कर सकता है। मैं प्रत्येक प्रकार के लिए एक विशिष्ट कतार बनाना नहीं चाहता, क्योंकि बहुत सारे हैं। (यह उत्पादक/उपभोक्ता की परिभाषा को फैलाता है, लेकिन मुझे यकीन नहीं है कि सही शब्द क्या है।)सी # निर्माता/उपभोक्ता/पर्यवेक्षक?
क्या इवेंटवाइटहैंडल जैसी कोई चीज है जो दालों को पैरामीटर के साथ अनुमति देती है? जैसे myHandle.Set(AddedType = "foo")
। अभी मैं Monitor.Wait
का उपयोग कर रहा हूं और फिर प्रत्येक उपभोक्ता यह देखने के लिए जांच करता है कि नाड़ी वास्तव में उनके लिए बनाई गई थी, लेकिन ऐसा लगता है कि यह व्यर्थ है।
अब मैं क्या है की एक pseduocode संस्करण:
class MyWorker {
public string MyType {get; set;}
public static Dictionary<string, MyInfo> data;
public static void DoWork(){
while(true){
if(Monitor.Wait(data, timeout)){
if (data.ContainsKey(MyType)){
// OK, do work
}
}
}
}
}
आप देख सकते हैं, मैं दालों मिल सकता है जब अन्य सामान dict में जोड़ा जाता है। मुझे केवल तब परवाह है जब माईटाइप को निर्देश में जोड़ा जाता है। क्या ऐसा करने के लिए कोई रास्ता है? यह एक बड़ा सौदा नहीं है, लेकिन, उदाहरण के लिए, मुझे मैन्युअल रूप से टाइमआउट्स को मैन्युअल रूप से संभालना होगा, क्योंकि प्रत्येक लॉक टाइमआउट के भीतर सफल हो सकता है, लेकिन MyType
को timeout
के भीतर कभी भी नहीं जोड़ा गया है।
सिर्फ एक विचार, क्या प्रत्येक ऑब्जेक्ट प्रकार की अपनी लॉक ऑब्जेक्ट हो सकती है, ताकि आप उचित ऑब्जेक्ट को 'मॉनिटर कर सकें।' –
@deltreme: हाँ, यह संभव है, लेकिन मैं प्रत्येक प्रकार के लिए एक नई वस्तु नहीं बनाना चाहता। – Xodarap
मुझे यकीन नहीं है कि प्रत्येक के लिए अलग-अलग कतार बनाने के लिए बहुत से प्रकार होने के कारण आपका क्या मतलब है। ऐसा कैसे? यह करने का यह स्वाभाविक तरीका है, और मुझे यकीन नहीं है कि कितनी अलग कतारें किसी अन्य घटना-हैंडलिंग तंत्र की तुलना में कम कुशल होंगी। –