private static Action <Task <int> > EndReadFactory(PhysicalConnection physical)
 {
     return(result =>
     {   // can't capture AsyncState on SocketRead, so we'll do it once per physical instead
         try
         {
             physical.Multiplexer.Trace("Completed asynchronously: processing in callback", physical.physicalName);
             if (physical.EndReading(result))
             {
                 physical.BeginReading();
             }
         }
         catch (Exception ex)
         {
             physical.RecordConnectionFailed(ConnectionFailureType.InternalFailure, ex);
         }
     });
 }