I'm trying to a create a "Task Queue" that has the following behaviour. Work is added via a Func such that the task is only started when the item is popped off the queue (no when it is added to the queue) Only a single item in the queue should be executing at any one time. If a new item is added, anything in the queue and the currently executing item (if there is one) should be cancelled, such that the new item can be started ASAP This is what I have come up with, using Channels public class ...