Skip to content

Instantly share code, notes, and snippets.

What would you like to do?
Sequencer implementation: iteration 1
using System;
using System.Collections.Generic;
using System.Threading;
namespace Sequencer
public class Sequencer
private Queue<Action> _pendingTasks = new Queue<Action>();
private bool _isRunning;
private readonly object _lock = new Object();
public void Dispatch(Action action)
// here we queue a call to our own logic
ThreadPool.QueueUserWorkItem( (x)=> Run((Action) x), action );
// run when the pool has available cpu time for us.
private void Run(Action action)
lock(_lock) {
if (_isRunning) {
// we need to store and stop
// ok, we can run
_isRunning = true;
while (true) {
// execute the next action
action ();
// we check if others are available
lock (_lock) {
if (_pendingTasks.Count == 0) {
_isRunning = false;
// pop the next task
action = _pendingTasks.Dequeue();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.