public void Dispose()
        {
            if (disposed)
            {
                return;
            }

            Queues.ForEach(Kill);
            FinishedProcesses.ForEach(Kill);
            FibersMap.Clear();
            disposed = true;
        }
        public void Switch(bool fiberFinished)
        {
            if (fiberFinished)
            {
                if (CurrentlyExecutingProcess == null)
                {
                    throw new InvalidOperationException("Attempted to finish nonexistent process");
                }

                FinishedProcesses.Add(CurrentlyExecutingProcess);
                LaunchNextFiber();
            }
            else
            {
                if (CurrentlyExecutingProcess != null)
                {
                    Queues[CurrentlyExecutingProcess.Priority].Enqueue(CurrentlyExecutingProcess);
                    Info("Process enqueued");
                }

                LaunchNextFiber();
            }
        }