public async virtual void OnOrderMarkedCompleted(object sender, OrderMarkedCompletedEventArgs e) { // имитация похода до окна выдачи продуктов await Task.Delay(TimeSpan.FromMilliseconds(_random.Next(MIN_MOVING_TIME_TO_PRODUCT_WINDOW_IN_MILLISECONDS, MAX_MOVING_TIME_TO_PRODUCT_WINDOW_IN_MILLISECONDS))); IProductDeliveryWindow productDeliveryWindow; try { productDeliveryWindow = _currentRestaurant.GetProductDeliveryWindowByNumber(e.CompletdOrderInfo.ProductDeliveryWindowNumber); TakeCompletedOrder(e.CompletdOrderInfo.OrderNumber, productDeliveryWindow); } catch (KeyNotFoundException) { // Этот момент не критичен, т.к. клиент может быть подписан сразу на несколько табло, и этот метод тригерят сразу много эвентов. // А номер заказа удаляется сразу после первого триггера эвента // Поэтому на остальные можно не обращать внимания // Этот момент я бы просто логировал } catch { throw; } }
public void OnOrderMarkedCompleted(object sender, OrderMarkedCompletedEventArgs e) { Logged(this, $"На табло \"{sender}\" заказ с номером {e.CompletdOrderInfo.OrderNumber} " + $"перешел в группу готовых заказов. Окно выдачи: {e.CompletdOrderInfo.ProductDeliveryWindowNumber}."); }