/// <summary>
        /// Resume the given <see cref="DesTask"/> using an interrupt.
        /// </summary>
        /// <param name="desTask">The <see cref="DesTask"/> to interrupt.</param>
        /// <param name="activator">The interruptor object.</param>
        /// <param name="data">Not used.</param>
        protected override void ResumeTask(DesTask desTask, object activator,
                                           object data)
        {
            // DO NOT INVOKE THE BASE CLASS IMPLEMENTATION!

            System.Diagnostics.Debug.Assert(Interruptor == activator);
            desTask.Interrupt(activator);
        }
        /// <summary>
        /// Transfers ownership of a DESResource item to another <see cref="DesTask"/>.
        /// </summary>
        /// <param name="activator">
        /// The current owner of the DESResource item.
        /// </param>
        /// <param name="data">Not used.</param>
        protected override void ExecuteTask(object activator, object data)
        {
            DesTask owner = activator as DesTask;

            if (owner == null)
            {
                throw new ArgumentException("'activator' not a DesTask instance.");
            }
            Blocker.TransferResource(owner, _receiver, _itemToTransfer);
            ResumeAll(Blocker, null);
        }
 /// <summary>
 /// Create a new <see cref="TransferResource"/> DesTask that will transfer
 /// a specific DESResource item to the given receiver.
 /// </summary>
 /// <param name="sim">The simulation context.</param>
 /// <param name="desResource">
 /// The <see cref="DESResource"/> containing the item to transfer to
 /// <paramref name="receiver"/>.
 /// </param>
 /// <param name="receiver">
 /// The <see cref="DesTask"/> which will become the new owner of an item
 /// contained in <paramref name="desResource"/>.
 /// </param>
 /// <param name="item">
 /// The DESResource item to transfer.  This should be <see langword="null"/>
 /// for anonymous resources.
 /// </param>
 public TransferResource(Simulation sim, DESResource desResource,
                         DesTask receiver, object item) : base(sim, desResource)
 {
     _receiver       = receiver;
     _itemToTransfer = item;
 }
 /// <summary>
 /// Create a new <see cref="TransferResource"/> DesTask that will transfer
 /// a DESResource item to the specified receiver.
 /// </summary>
 /// <param name="sim">The simulation context.</param>
 /// <param name="desResource">
 /// The <see cref="DESResource"/> containing the item to transfer to
 /// <paramref name="receiver"/>.
 /// </param>
 /// <param name="receiver">
 /// The <see cref="DesTask"/> which will become the new owner of an item
 /// contained in <paramref name="desResource"/>.
 /// </param>
 public TransferResource(Simulation sim, DESResource desResource, DesTask receiver)
     : this(sim, desResource, receiver, null)
 {
 }