private async void StartReading()
 {
     try
     {
         while (true)
         {
             var size = BitConverter.ToInt32(await _stream.ReadExactlyAsync(4), 0);
             var req  = new Request(this, await _stream.ReadExactlyAsync(size));
             ThreadPool.QueueUserWorkItem(_ => _engine.HandleRequest(req));
         }
     }
     catch (Exception e)
     {
         _stream.Dispose();
         _tcpHost.FireNetworkError(e);
     }
 }