class ActionQueue
{
private readonly Queue<Action> _queue = new Queue<Action>();
public void Add(Action action) { _queue.Enqueue(action); }
public void AddRange(IEnumerable<Action> actions) { actions.ToList().ForEach(Add);}
public void RunAll()
{
while (_queue.Count > 0)
{
var current = _queue.Dequeue();
current();
}
}
}
class Program
{
static void Main()
{
var actionQueue = new ActionQueue();
actionQueue.Add(() =>
{
Console.WriteLine(1);
actionQueue.AddRange(Enumerable
.Range(2, 8)
.Select(x => new Action(() => Console.WriteLine(x))));
});
actionQueue.Add(() => Console.WriteLine(10));
actionQueue.RunAll();
}
}
1 10
2 3 4 5 6 7 8 9
почему 10 не идет после 9? почему именно такой вывод?
R>почему 10 не идет после 9? почему именно такой вывод?
На всякий проверьте под отладчиком, но и без него всё очевидно
В момент вызова RunAll() в очереди 2 действия — "WriteLine(1); ..." и "WriteLine(10)". Когда выполняется первое действие — в очередь добавляются 2..8, но добавятся они уже после десятки.
P.S. Код на побочных эффектах — лучший способ отстрелить ногу в процессе надевания носка