Beispiel #1
0
        private bool TryCooking()
        {
            Monitor.Enter(_kitchen._cookingLock);
            var ingredient = _kitchen.PeekNextIngredientToCook();
            var retry      = false;

            if (ingredient != null)
            {
                retry = true;
                if (!_kitchen.Owen.IsInUse)
                {
                    var owen = _kitchen.Owen;
                    Monitor.Enter(owen._lock);
                    if (owen.PutIngredientIntoOwen(ingredient))
                    {
                        _kitchen.GetIngredientToCook();
                    }
                    else
                    {
                        StartOwen();
                        retry = false;
                    }
                    if (_kitchen.Owen.CurrentCount == Owen.Capacity)
                    {
                        StartOwen();
                        retry = false;
                    }
                    Monitor.Exit(owen._lock);
                }
                else
                {
                    retry = false;
                }
            }
            else
            {
                if (_kitchen.Owen.CurrentCount > 0 && !_kitchen.Owen.IsInUse && !_kitchen.HasIngredientToPrepare())
                {
                    StartOwen();
                }
            }
            Monitor.Exit(_kitchen._cookingLock);
            return(retry);
        }