使用委托作为方法执行队列

本文关键字:方法 执行 队列 | 更新日期: 2023-09-27 18:07:12

这个问题与XNA 4.0游戏有关,所以它自然会有一个简单的游戏执行循环:

Init()
Load()
Update()
Draw()

等。

我希望使这个循环尽可能干净,我一直在我的脑海里计划它,我想在实际集成它之前写下我想要做的事情。作为一种方法队列,委托有多实用?

Init()
  initQueue(RequiredArgs)
Load()
  loadQueue(RequiredArgs)

等。

我会根据需要向队列添加方法,可能会创建多个委托,这样我就不必向委托添加100个参数,并一起执行多个共享类似参数的方法。

使用委托作为方法执行队列

委托集合(通常是队列)的一般概念没有问题。这是一个合理的消息循环实现。

值得注意的是,如果消息可以从多个线程添加到队列中,那么使用BlockingCollection作为队列的集合可能是有意义的,这样对集合的多线程访问就不会出现问题。

集合的类型可以是BlockingCollection<Action>。不需要管理允许任何其他委托签名。您不需要处理任何输出,也不需要给它任何参数。如果有人希望调用一个有参数的方法,他们可以curry函数来修复参数(可能使用lambda,如() => someFunction(param1, param2);)。

据我所知,你有几个选择。

首先,创建一个List<Action>或其他列表来保存您的委托。这是为了让您可以在委托中摸索您的方式。

对于参数,您可以:

a)让它接受List, Arrayparams作为输入(这些将是对象类型)。这允许每周定义无限值的输入。你的函数只需要知道哪个是哪个,并希望你插入的是正确的。我不建议你这样做,除非你不能……

b)创建一个基抽象类,作为所有委托函数调用的Base Settings。然后为每个需要特定东西的委托制作专门的继承类。这可能会更耗时,但从长远来看(为了维护和可读性)是值得的。