private void ReadMessagesTask()
{
Log.Info("read task started");
try
{
using(var buffer = new MemoryStream(4096))
using(var writer = new DecoratedObjectWriter(buffer))
{
Message message;
do
{
ThrowIfCancellationRequested();
message = _messageReader.Read();
buffer.SetLength(0L);
writer.WriteMessage(message);
_pendingMessages.Add(buffer.ToArray());
_wakeUpMainTask.Set();
} while(message != null);
_pendingMessages.CompleteAdding();
_wakeUpMainTask.Set();
}
Log.InfoFormat("completed reading messages");
}
catch(OperationCanceledException) { }
catch(Exception exc)
{
Log.Fatal(exc);
throw;
}
finally
{
Log.Info("read task stopped");
}
}