An experimental library to make multi-threaded dispatch code more testable.
Models a job dispatch pattern and provides both threaded and non threaded implementations.
Doing a batch of work:
void DoBatch(IEnumerable<object> workToDo) {
var dispatcher = Dispatch<object>.CreateDefaultMultithreaded("MyTask");
dispatcher.AddConsumer(MyWorkMethod);
dispatcher.Start();
dispatcher.AddWork(workToDo);
dispatcher.WaitForEmptyQueueAndStop(); // only call this if you're not filling the queue from elsewhere
}
Handling long running incoming jobs:
dispatcher = Dispatch<object>.CreateDefaultMultithreaded("MyService");
dispatcher.AddConsumer(MyWorkMethod);
dispatcher.Start();
.
.
.
dispatcher.AddWork(...);
Using a polling method to handle incoming jobs in a long-running process:
var dispatcher = Dispatch<object>.PollAndProces("MyService", myPollingSource);
dispatcher.AddConsumer(MyWorkMethod);
dispatcher.Start();
with a method defined like
void MyWorkMethod(object obj)
{
. . .
}