private WriteDelivery ( Amqp.Delivery delivery ) : void | ||
delivery | Amqp.Delivery | |
Результат | void |
void WriteDelivery(Delivery delivery)
{
while (delivery != null)
{
delivery.Handle = this.Handle;
try
{
bool settled = delivery.Settled;
this.Session.SendDelivery(delivery);
if (settled && delivery.OnOutcome != null)
{
delivery.OnOutcome(delivery.Message, new Accepted(), delivery.UserToken);
}
}
catch
{
this.writing = false;
throw;
}
lock (this.ThisLock)
{
delivery = (Delivery)this.outgoingList.First;
if (delivery == null)
{
this.writing = false;
}
else if (this.credit > 0)
{
this.outgoingList.Remove(delivery);
delivery.Tag = Delivery.GetDeliveryTag(this.deliveryCount);
this.credit--;
this.deliveryCount++;
}
else
{
delivery = null;
this.writing = false;
}
}
}
}
}