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); } }); }