private void TentarIniciarPreparo() { if (Monitor.TryEnter(AlocarCozinheiroMonitor, 200)) { try { var cozinheiro = Cozinheiros.FirstOrDefault(c => c.Livre); if (cozinheiro == null) { return; } Pedido pedido = null; if (FilaDePedidos.TryDequeue(out pedido)) { cozinheiro.Preparar(pedido, PedidoPronto); } } finally { Monitor.Exit(AlocarCozinheiroMonitor); } } }
public void NovoPedido(Pedido pedido) { FilaDePedidos.Enqueue(pedido); TentarIniciarPreparo(); }