@@ -410,8 +410,8 @@ private static ValueTask<Packet> ReadPacketAsync(BufferedByteReader bufferedByte
410
410
return ReadPacketAfterHeader ( headerBytesTask . Result , bufferedByteReader , byteHandler , getNextSequenceNumber , protocolErrorBehavior , ioBehavior ) ;
411
411
return AddContinuation ( headerBytesTask , bufferedByteReader , byteHandler , getNextSequenceNumber , protocolErrorBehavior , ioBehavior ) ;
412
412
413
- static ValueTask < Packet > AddContinuation ( ValueTask < ArraySegment < byte > > headerBytes_ , BufferedByteReader bufferedByteReader_ , IByteHandler byteHandler_ , Func < int > getNextSequenceNumber_ , ProtocolErrorBehavior protocolErrorBehavior_ , IOBehavior ioBehavior_ ) =>
414
- headerBytes_ . ContinueWith ( x => ReadPacketAfterHeader ( x , bufferedByteReader_ , byteHandler_ , getNextSequenceNumber_ , protocolErrorBehavior_ , ioBehavior_ ) ) ;
413
+ static async ValueTask < Packet > AddContinuation ( ValueTask < ArraySegment < byte > > headerBytes_ , BufferedByteReader bufferedByteReader_ , IByteHandler byteHandler_ , Func < int > getNextSequenceNumber_ , ProtocolErrorBehavior protocolErrorBehavior_ , IOBehavior ioBehavior_ ) =>
414
+ await ReadPacketAfterHeader ( await headerBytes_ . ConfigureAwait ( false ) , bufferedByteReader_ , byteHandler_ , getNextSequenceNumber_ , protocolErrorBehavior_ , ioBehavior_ ) . ConfigureAwait ( false ) ;
415
415
}
416
416
417
417
private static ValueTask < Packet > ReadPacketAfterHeader ( ArraySegment < byte > headerBytes , BufferedByteReader bufferedByteReader , IByteHandler byteHandler , Func < int > getNextSequenceNumber , ProtocolErrorBehavior protocolErrorBehavior , IOBehavior ioBehavior )
@@ -435,8 +435,8 @@ private static ValueTask<Packet> ReadPacketAfterHeader(ArraySegment<byte> header
435
435
return CreatePacketFromPayload ( payloadBytesTask . Result , payloadLength , protocolErrorBehavior , packetOutOfOrderException ) ;
436
436
return AddContinuation ( payloadBytesTask , payloadLength , protocolErrorBehavior , packetOutOfOrderException ) ;
437
437
438
- static ValueTask < Packet > AddContinuation ( ValueTask < ArraySegment < byte > > payloadBytesTask_ , int payloadLength_ , ProtocolErrorBehavior protocolErrorBehavior_ , Exception packetOutOfOrderException_ )
439
- => payloadBytesTask_ . ContinueWith ( x => CreatePacketFromPayload ( x , payloadLength_ , protocolErrorBehavior_ , packetOutOfOrderException_ ) ) ;
438
+ static async ValueTask < Packet > AddContinuation ( ValueTask < ArraySegment < byte > > payloadBytesTask_ , int payloadLength_ , ProtocolErrorBehavior protocolErrorBehavior_ , Exception packetOutOfOrderException_ ) =>
439
+ await CreatePacketFromPayload ( await payloadBytesTask_ . ConfigureAwait ( false ) , payloadLength_ , protocolErrorBehavior_ , packetOutOfOrderException_ ) . ConfigureAwait ( false ) ;
440
440
}
441
441
442
442
private static ValueTask < Packet > CreatePacketFromPayload ( ArraySegment < byte > payloadBytes , int payloadLength , ProtocolErrorBehavior protocolErrorBehavior , Exception exception )
@@ -476,11 +476,12 @@ private static ValueTask<ArraySegment<byte>> DoReadPayloadAsync(BufferedByteRead
476
476
477
477
return AddContinuation ( readPacketTask , bufferedByteReader , byteHandler , getNextSequenceNumber , previousPayloads , protocolErrorBehavior , ioBehavior ) ;
478
478
479
- static ValueTask < ArraySegment < byte > > AddContinuation ( ValueTask < Packet > readPacketTask_ , BufferedByteReader bufferedByteReader_ , IByteHandler byteHandler_ , Func < int > getNextSequenceNumber_ , ArraySegmentHolder < byte > previousPayloads_ , ProtocolErrorBehavior protocolErrorBehavior_ , IOBehavior ioBehavior_ )
479
+ static async ValueTask < ArraySegment < byte > > AddContinuation ( ValueTask < Packet > readPacketTask_ , BufferedByteReader bufferedByteReader_ , IByteHandler byteHandler_ , Func < int > getNextSequenceNumber_ , ArraySegmentHolder < byte > previousPayloads_ , ProtocolErrorBehavior protocolErrorBehavior_ , IOBehavior ioBehavior_ )
480
480
{
481
- return readPacketTask_ . ContinueWith ( packet =>
482
- HasReadPayload ( previousPayloads_ , packet , protocolErrorBehavior_ , out var result_ ) ? result_ :
483
- DoReadPayloadAsync ( bufferedByteReader_ , byteHandler_ , getNextSequenceNumber_ , previousPayloads_ , protocolErrorBehavior_ , ioBehavior_ ) ) ;
481
+ var packet = await readPacketTask_ . ConfigureAwait ( false ) ;
482
+ var resultTask = HasReadPayload ( previousPayloads_ , packet , protocolErrorBehavior_ , out var result_ ) ? result_ :
483
+ DoReadPayloadAsync ( bufferedByteReader_ , byteHandler_ , getNextSequenceNumber_ , previousPayloads_ , protocolErrorBehavior_ , ioBehavior_ ) ;
484
+ return await resultTask . ConfigureAwait ( false ) ;
484
485
}
485
486
}
486
487
@@ -507,24 +508,23 @@ private static bool HasReadPayload(ArraySegmentHolder<byte> previousPayloads, Pa
507
508
return true ;
508
509
}
509
510
510
- result = default ( ValueTask < ArraySegment < byte > > ) ;
511
+ result = default ;
511
512
return false ;
512
513
}
513
514
514
515
public static ValueTask < int > WritePayloadAsync ( IByteHandler byteHandler , Func < int > getNextSequenceNumber , ReadOnlyMemory < byte > payload , IOBehavior ioBehavior )
515
516
{
516
517
return payload . Length <= MaxPacketSize ? WritePacketAsync ( byteHandler , getNextSequenceNumber ( ) , payload , ioBehavior ) :
517
- CreateTask ( byteHandler , getNextSequenceNumber , payload , ioBehavior ) ;
518
+ WritePayloadAsyncAwaited ( byteHandler , getNextSequenceNumber , payload , ioBehavior ) ;
518
519
519
- static ValueTask < int > CreateTask ( IByteHandler byteHandler_ , Func < int > getNextSequenceNumber_ , ReadOnlyMemory < byte > payload_ , IOBehavior ioBehavior_ )
520
+ static async ValueTask < int > WritePayloadAsyncAwaited ( IByteHandler byteHandler_ , Func < int > getNextSequenceNumber_ , ReadOnlyMemory < byte > payload_ , IOBehavior ioBehavior_ )
520
521
{
521
- var writeTask = default ( ValueTask < int > ) ;
522
522
for ( var bytesSent = 0 ; bytesSent < payload_ . Length ; bytesSent += MaxPacketSize )
523
523
{
524
524
var contents = payload_ . Slice ( bytesSent , Math . Min ( MaxPacketSize , payload_ . Length - bytesSent ) ) ;
525
- writeTask = writeTask . ContinueWith ( x => WritePacketAsync ( byteHandler_ , getNextSequenceNumber_ ( ) , contents , ioBehavior_ ) ) ;
525
+ await WritePacketAsync ( byteHandler_ , getNextSequenceNumber_ ( ) , contents , ioBehavior_ ) . ConfigureAwait ( false ) ;
526
526
}
527
- return writeTask ;
527
+ return 0 ;
528
528
}
529
529
}
530
530
@@ -541,15 +541,13 @@ private static ValueTask<int> WritePacketAsync(IByteHandler byteHandler, int seq
541
541
ArrayPool < byte > . Shared . Return ( buffer ) ;
542
542
return default ;
543
543
}
544
- return AddContinuation ( task , buffer ) ;
544
+ return WritePacketAsyncAwaited ( task , buffer ) ;
545
545
546
- static ValueTask < int > AddContinuation ( ValueTask < int > task_ , byte [ ] buffer_ )
546
+ static async ValueTask < int > WritePacketAsyncAwaited ( ValueTask < int > task_ , byte [ ] buffer_ )
547
547
{
548
- return task_ . ContinueWith ( x =>
549
- {
550
- ArrayPool < byte > . Shared . Return ( buffer_ ) ;
551
- return default ( ValueTask < int > ) ;
552
- } ) ;
548
+ await task_ . ConfigureAwait ( false ) ;
549
+ ArrayPool < byte > . Shared . Return ( buffer_ ) ;
550
+ return 0 ;
553
551
}
554
552
}
555
553
0 commit comments