@@ -116,16 +116,20 @@ private static bool HasReadPayload(ref ArraySegment<byte> previousPayloads, Pack
116116
117117 public static ValueTask < int > WritePayloadAsync ( IByteHandler byteHandler , Func < int > getNextSequenceNumber , ArraySegment < byte > payload , IOBehavior ioBehavior )
118118 {
119- if ( payload . Count <= MaxPacketSize )
120- return WritePacketAsync ( byteHandler , getNextSequenceNumber ( ) , payload , ioBehavior ) ;
119+ return payload . Count <= MaxPacketSize ? WritePacketAsync ( byteHandler , getNextSequenceNumber ( ) , payload , ioBehavior ) :
120+ CreateTask ( byteHandler , getNextSequenceNumber , payload , ioBehavior ) ;
121121
122- var writeTask = default ( ValueTask < int > ) ;
123- for ( var bytesSent = 0 ; bytesSent < payload . Count ; bytesSent += MaxPacketSize )
122+ // NOTE: use a local function (with no captures) to defer creation of lambda objects
123+ ValueTask < int > CreateTask ( IByteHandler byteHandler_ , Func < int > getNextSequenceNumber_ , ArraySegment < byte > payload_ , IOBehavior ioBehavior_ )
124124 {
125- var contents = new ArraySegment < byte > ( payload . Array , payload . Offset + bytesSent , Math . Min ( MaxPacketSize , payload . Count - bytesSent ) ) ;
126- writeTask = writeTask . ContinueWith ( x => WritePacketAsync ( byteHandler , getNextSequenceNumber ( ) , contents , ioBehavior ) ) ;
125+ var writeTask = default ( ValueTask < int > ) ;
126+ for ( var bytesSent = 0 ; bytesSent < payload_ . Count ; bytesSent += MaxPacketSize )
127+ {
128+ var contents = new ArraySegment < byte > ( payload_ . Array , payload_ . Offset + bytesSent , Math . Min ( MaxPacketSize , payload_ . Count - bytesSent ) ) ;
129+ writeTask = writeTask . ContinueWith ( x => WritePacketAsync ( byteHandler_ , getNextSequenceNumber_ ( ) , contents , ioBehavior_ ) ) ;
130+ }
131+ return writeTask ;
127132 }
128- return writeTask ;
129133 }
130134
131135 public static ValueTask < int > WritePacketAsync ( IByteHandler byteHandler , int sequenceNumber , ArraySegment < byte > contents , IOBehavior ioBehavior )
0 commit comments