Ray*_*nos 10 c# multithreading delegates
有没有办法让委托在特定的线程上运行?
说我有:
CustomDelegate del = someObject.someFunction;
Thread dedicatedThread = ThreadList[x];
Run Code Online (Sandbox Code Playgroud)
我是否可以拥有一致的后台长时间运行线程,并在需要时调用我自己的代理.它必须每次都是相同的线程.
[编辑]
我希望它在专用线程上的原因是时间是我打算在它上面运行委托并在y毫秒后暂停该线程,并在我运行另一个委托时恢复该线程.我觉得这是不可能的.我将有一个委托队列,让线程的主要功能从它读取并运行.
为了澄清一个具体的例子,我有一个带有一堆玩家线程的游戏系统.我希望每个playerthread都可以在其上运行游戏事件的事件处理程序.如果事件处理程序花费太多时间,我希望能够通过暂停其线程来暂停该特定玩家直到下一个事件.
因此,有一个专用线程,我可以运行多个事件处理程序,我可以暂停一个特定的玩家的AI,以防它被窃听或花费太长时间.
我认为最好的解决方案是使用Task对象并将它们排队到运行单个线程的StaThreadScheduler中。
或者,您可以使用Nito.AsyncActionThread中的来创建具有内置委托队列的普通线程。Action
然而,这些都不能直接满足另一种需求:“暂停”一个操作并继续另一个操作的能力。为此,您需要在每个操作中撒上“同步点”,并有办法保存其状态、重新排队并继续下一个操作。
所有这些复杂性都非常接近线程调度系统,因此我建议退一步并进行更多的重新设计。您可以允许每个操作排队ThreadPool(我建议只让每个操作都是一个Task对象)。您仍然需要添加“同步点”,但您只需暂停(阻止)它们,而不是保存状态并重新对它们进行排队。