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"); } }
private void Accept(IAsyncResult iar) { using(var client = _lisenter.EndAcceptTcpClient(iar)) using(var writer = new DecoratedObjectWriter(client.GetStream())) { foreach(var message in Messages) { writer.WriteMessage(message); } writer.Write(null); } }