public void Enq()
        {
            var q = new ThreadSafeQueueWorker();

            var l = new List <int>();

            q.Enqueue(() => l.Add(1));
            q.Enqueue(() => q.Enqueue(() => l.Add(-1)));
            q.Enqueue(() => l.Add(2));
            q.Enqueue(() => q.Enqueue(() => l.Add(-2)));
            q.Enqueue(() => l.Add(3));
            q.Enqueue(() => q.Enqueue(() => l.Add(-3)));
            q.Enqueue(() => l.Add(4));
            q.Enqueue(() => q.Enqueue(() => l.Add(-4)));
            q.Enqueue(() => l.Add(5));
            q.Enqueue(() => q.Enqueue(() => l.Add(-5)));
            q.Enqueue(() => l.Add(6));
            q.Enqueue(() => q.Enqueue(() => l.Add(-6)));
            q.Enqueue(() => l.Add(7));
            q.Enqueue(() => q.Enqueue(() => l.Add(-7)));
            q.Enqueue(() => l.Add(8));
            q.Enqueue(() => q.Enqueue(() => l.Add(-8)));
            q.Enqueue(() => l.Add(9));
            q.Enqueue(() => q.Enqueue(() => l.Add(-9)));
            q.Enqueue(() => l.Add(10));
            q.Enqueue(() => q.Enqueue(() => l.Add(-10)));
            q.Enqueue(() => l.Add(11));
            q.Enqueue(() => q.Enqueue(() => l.Add(-11)));
            q.Enqueue(() => l.Add(12));

            q.ExecuteAll(ex => { });

            l.Is(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12);
            l.Clear();

            q.ExecuteAll(ex => { });
            l.Is(-1, -2, -3, -4, -5, -6, -7, -8, -9, -10, -11);
            l.Clear();

            q.ExecuteAll(ex => { });
            l.Count.Is(0);

            q.Enqueue(() => l.Add(1));
            q.Enqueue(() => q.Enqueue(() => l.Add(-1)));
            q.Enqueue(() => l.Add(2));
            q.Enqueue(() => q.Enqueue(() => l.Add(-2)));
            q.Enqueue(() => l.Add(3));
            q.Enqueue(() => q.Enqueue(() => l.Add(-3)));
            q.Enqueue(() => l.Add(4));
            q.Enqueue(() => q.Enqueue(() => l.Add(-4)));
            q.Enqueue(() => l.Add(5));
            q.Enqueue(() => q.Enqueue(() => l.Add(-5)));
            q.Enqueue(() => l.Add(6));
            q.Enqueue(() => q.Enqueue(() => l.Add(-6)));
            q.Enqueue(() => l.Add(7));
            q.Enqueue(() => q.Enqueue(() => l.Add(-7)));
            q.Enqueue(() => l.Add(8));
            q.Enqueue(() => q.Enqueue(() => l.Add(-8)));
            q.Enqueue(() => l.Add(9));
            q.Enqueue(() => q.Enqueue(() => l.Add(-9)));
            q.Enqueue(() => l.Add(10));
            q.Enqueue(() => q.Enqueue(() => l.Add(-10)));
            q.Enqueue(() => l.Add(11));
            q.Enqueue(() => q.Enqueue(() => l.Add(-11)));
            q.Enqueue(() => l.Add(12));

            q.ExecuteAll(ex => { });
            l.Is(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12);
            l.Clear();

            q.ExecuteAll(ex => { });
            l.Is(-1, -2, -3, -4, -5, -6, -7, -8, -9, -10, -11);
            l.Clear();

            q.ExecuteAll(ex => { });
            l.Count.Is(0);
        }
 void OnLevelWasLoaded(int level)
 {
     // TODO clear queueWorker?
     queueWorker = new ThreadSafeQueueWorker();
 }