public void MarkAsDelivered() { if (_promise.TrySetResult(0)) { Delivered?.Invoke(this, EventArgs.Empty); } }
/// <summary> /// Метод, осуществляет доставку материала до конца конвейера и вызывает внешний метод при завершении доставки /// </summary> private async Task OnDelivered(ushort uid, Delivered delivered) { if (Speed == 0) { logger.Error($"Не установлена скорость перемещения для конвейера {ConveyorId}"); throw new DivideByZeroException($"Не установлена скорость перемещения для конвейера {ConveyorId}"); } List <Material> material = new List <Material>(); foreach (KeyValuePair <ushort, List <Material> > _material in Material) { if (_material.Key == uid) { material = _material.Value; break; } } double delay = (Math.Round(Length / Speed, 0)) * 1000; await Task.Delay(TimeSpan.FromMilliseconds(delay)); delivered?.Invoke(material); Material.Remove(uid); MaterialCount = Material.Count; Status = Status.Delivered; }
public void OnDelivered() { if (notified) { throw new InvalidOperationException("this token as already been notified"); } notified = true; Delivered?.Invoke(); }
internal void Notify(bool delivered) { if (notified) { throw new InvalidOperationException("this token as already been notified"); } notified = true; if (delivered) { Delivered.Invoke(); } else { Lost.Invoke(); } }
//процесс доставки заказчику public virtual bool Deliver(Purchase purchase, SynchronizationContext context) { bool CanDeliver = DeliveringThread == null || !DeliveringThread.IsAlive; //смотрим, может ли доставщик выполнить доставку if (CanDeliver) { lock (purchase) { DeliveringThread = new Thread(() => { Thread.Sleep(10000); purchase.IsMade = true; //теперь считаем заказ выполненным context.Send(obj => Delivered?.Invoke(obj as Purchase, this), purchase); }); DeliveringThread.Start(); } } return(CanDeliver); }