A WorkSingularTask runs a task in a WorkDispatcher, but never concurrently with itself. That is, the function provided to the WorkSingularTask runs concurrently with other tasks in the WorkDispatcher, but never with another invocation of itself.
This is useful if there is single-threaded work to do that can be overlapped with other parallel tasks in a dispatcher. For example, a multiple-producer, single-consumer problem can be tackled this way. Run the producer tasks as usual in a WorkDispatcher and create a WorkSingularTask for the consumer. When a producer task has generated a result to consume, it invokes Wake() on the consumer task. This ensures that the consumer runs only when there are results to consume, and it lets the consumer operate single-threaded. For example, the consumer could populate stl containers without locking.
Definition at line 56 of file singularTask.h.