@@ -116,16 +116,20 @@ private static bool HasReadPayload(ref ArraySegment<byte> previousPayloads, Pack
116
116
117
117
public static ValueTask < int > WritePayloadAsync ( IByteHandler byteHandler , Func < int > getNextSequenceNumber , ArraySegment < byte > payload , IOBehavior ioBehavior )
118
118
{
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 ) ;
121
121
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_ )
124
124
{
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 ;
127
132
}
128
- return writeTask ;
129
133
}
130
134
131
135
public static ValueTask < int > WritePacketAsync ( IByteHandler byteHandler , int sequenceNumber , ArraySegment < byte > contents , IOBehavior ioBehavior )
0 commit comments