是的,您可以使用 aList<Action>
或 a来做到这Queue<Action>
一点,我认为它更适合。Action
是无参数 void委托的类型:
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>
for one,Action<T, T>
for two,依此类推。对于返回值,使用Func
代替Action
(或Func<T>
等)。
也许某个活动也会对您有所帮助。事件是 C# 使用观察者模式的语言特性。
// 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>
上面可以启动或重用线程的方式不同,多播委托被公开为来自外部的一次调用,让您只使用一个线程进行所有调用。