हाँ, तो आप इस एक List<Action>
या एक Queue<Action>
जो मेरी राय में थोड़ा बेहतर सूट का उपयोग करके कर सकते हैं।
var functions = new Queue<Action>();
functions.Enqueue(() => Console.WriteLine("Foo"));
functions.Enqueue(() => Console.WriteLine("Bar"));
while (functions.Any())
{
// note the double parenthesis here: one for Dequeue
// and one for your dequeued function
functions.Dequeue()();
}
आप मानकों की जरूरत है, दो और इसके आगे के लिए एक के लिए Action<T>
, Action<T, T>
का उपयोग करें: Action
नो पैरामीटर शून्य प्रतिनिधि के लिए एक प्रकार है। वापसी मूल्य के लिए, Action
(या Func<T>
इत्यादि) के बजाय Func
का उपयोग करें।
शायद ईवेंट आपकी भी मदद करेगा। घटनाक्रम पर्यवेक्षक पैटर्न का उपयोग करने के लिए सी # की भाषा सुविधा है।
// events are usually on the instance rather than static
private static event EventHandler MyEvent;
static void Main(string[] args)
{
MyEvent += (s, e) => Console.WriteLine("FooEvent");
MyEvent += (s, e) => Console.WriteLine("BarEvent");
MyEvent(null, EventArgs.Empty);
}
एक घटना एक बहुस्त्र्पीय प्रतिनिधि, जो कार्यों के सूची के लिए एक प्रतिनिधि है। आप प्रत्येक हैंडलर के लिए थ्रेडिंग को नियंत्रित नहीं कर सकते हैं: ऊपर Queue<Action>
के विपरीत, जहां आप धागे को शुरू या पुन: उपयोग कर सकते हैं, एक मल्टीकास्ट प्रतिनिधि को के रूप में उजागर किया जाता है, एक कॉल बाहर से कॉल करता है, जिससे आप सभी आमंत्रणों के लिए केवल एक थ्रेड का उपयोग कर सकते हैं।
स्रोत
2013-07-29 08:28:20
आप [प्रतिनिधियों] (http://msdn.microsoft.com/en-us/library/ms173172.aspx) का उपयोग कर सकते हैं, जो फ़ंक्शन पॉइंटर्स का सी # संस्करण है। –
आप जिस भी विधि का उपयोग करते हैं, यह सुनिश्चित करने के लिए कि आप थ्रेड के बीच सिंक्रनाइज़ेशन समस्याएं प्राप्त नहीं करते हैं, सुनिश्चित करें कि आप थ्रेड-सुरक्षित 'सूची' का उपयोग करें। –