コード例 #1
0
 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");
     }
 }
コード例 #2
0
 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);
     }
 }