private void ProcessPendingMessages()
{
if(_pendingMessages.Count == 0)
{
return;
}
byte[] message;
while(_dispatchMessages.Count < DispatchMessagesCapacity &&
_pendingMessages.TryTake(out message, 0, _cancellationToken))
{
if(_sessions.Count > 0)
{
_dispatchMessages.Enqueue(message);
}
_dispatchedMessageHistory.Append(message);
}
if(_dispatchMessages.Count > 0)
{
ForEachSession(session =>
{
session.SendAsync(_dispatchMessages);
if(_pendingMessages.IsCompleted)
{
session.CompleteAsync();
}
});
_dispatchMessages.Clear();
}
}