Is there any way to get a delegate to run on a specific thread?
Say I have:
CustomDelegate del = someObject.someFunction;
Thread dedicatedThread = ThreadList[x];
Can I have a consistent background long running thread and invoke my own delegates on it whenever I need it. It has to be the same thread each time.
[Edit]
The reason why I want it to be on a dedicated thread is time is that I inten to run the delegate on it and suspend the thread after y milliseconds, and resume the thread when I run another delegate on it. I see this isn’t possible. I will have a delegate queue and let the main function of the thread read and run from it.
To clarify with a concrete example, I have a game system with a bunch of player threads. I would like each playerthread to run event handlers for game events on it. If the event handlers take too much time I would like to be able to pause that particular player until the next event by suspending its thread.
Thus having a dedicated thread on which I can run multiple event handlers I can pause a particular player’s AI in case it became bugged or is taking too long.
I think the best solution is to use
Taskobjects and queue them to an StaThreadScheduler running a single thread.Alternatively, you could use the
ActionThreadin Nito.Async to create a normal thread with a built-in queue ofActiondelegates.However, neither of these will directly address another need: the ability to "pause" one action and continue with another one. To do this, you’d need to sprinkle "synchronization points" throughout every action and have a way to save its state, re-queue it, and continue with the next action.
All that complexity is very nearly approaching a thread scheduling system, so I recommend taking a step back and doing more of a re-design. You could allow each action to be queued to the
ThreadPool(I recommend just having each one be aTaskobject). You’ll still need to sprinkle "synchronization points", but instead of saving state and re-queueing them, you’ll just need to pause (block) them.