@@ -11,7 +11,7 @@ namespace Manandre.IO
1111 /// <summary>
1212 ///
1313 /// </summary>
14- #pragma warning disable S3881
14+ #pragma warning disable S3881
1515 public abstract class AsyncStream : Stream
1616 {
1717#if ! NETSTANDARD1_3
@@ -442,50 +442,56 @@ public override void SetLength(long value)
442442 public override async Task < int > ReadAsync ( byte [ ] buffer , int offset , int count , CancellationToken cancellationToken )
443443 {
444444 var read = 0 ;
445- var linkedCts = CancellationTokenSource . CreateLinkedTokenSource ( cancellationToken , cts . Token ) ;
446- try
445+ using ( var linkedCts = CancellationTokenSource . CreateLinkedTokenSource ( cancellationToken , cts . Token ) )
447446 {
448- using ( await locker . LockAsync ( linkedCts . Token ) )
447+ try
449448 {
450- read = await _stream . ReadAsync ( buffer , offset , count , linkedCts . Token ) ;
449+ using ( await locker . LockAsync ( linkedCts . Token ) )
450+ {
451+ read = await _stream . ReadAsync ( buffer , offset , count , linkedCts . Token ) . ConfigureAwait ( false ) ;
452+ }
453+ }
454+ catch ( OperationCanceledException )
455+ {
456+ cancellationToken . ThrowIfCancellationRequested ( ) ;
451457 }
452- }
453- catch ( OperationCanceledException )
454- {
455- cancellationToken . ThrowIfCancellationRequested ( ) ;
456458 }
457459 return read ;
458460 }
459461
460462 public override async Task WriteAsync ( byte [ ] buffer , int offset , int count , CancellationToken cancellationToken )
461463 {
462- var linkedCts = CancellationTokenSource . CreateLinkedTokenSource ( cancellationToken , cts . Token ) ;
463- try
464+ using ( var linkedCts = CancellationTokenSource . CreateLinkedTokenSource ( cancellationToken , cts . Token ) )
464465 {
465- using ( await locker . LockAsync ( linkedCts . Token ) )
466+ try
466467 {
467- await _stream . WriteAsync ( buffer , offset , count , linkedCts . Token ) ;
468+ using ( await locker . LockAsync ( linkedCts . Token ) )
469+ {
470+ await _stream . WriteAsync ( buffer , offset , count , linkedCts . Token ) . ConfigureAwait ( false ) ;
471+ }
472+ }
473+ catch ( OperationCanceledException )
474+ {
475+ cancellationToken . ThrowIfCancellationRequested ( ) ;
468476 }
469- }
470- catch ( OperationCanceledException )
471- {
472- cancellationToken . ThrowIfCancellationRequested ( ) ;
473477 }
474478 }
475479
476480 public override async Task FlushAsync ( CancellationToken cancellationToken )
477481 {
478- var linkedCts = CancellationTokenSource . CreateLinkedTokenSource ( cancellationToken , cts . Token ) ;
479- try
482+ using ( var linkedCts = CancellationTokenSource . CreateLinkedTokenSource ( cancellationToken , cts . Token ) )
480483 {
481- using ( await locker . LockAsync ( linkedCts . Token ) )
484+ try
482485 {
483- await _stream . FlushAsync ( linkedCts . Token ) ;
486+ using ( await locker . LockAsync ( linkedCts . Token ) )
487+ {
488+ await _stream . FlushAsync ( linkedCts . Token ) . ConfigureAwait ( false ) ;
489+ }
490+ }
491+ catch ( OperationCanceledException )
492+ {
493+ cancellationToken . ThrowIfCancellationRequested ( ) ;
484494 }
485- }
486- catch ( OperationCanceledException )
487- {
488- cancellationToken . ThrowIfCancellationRequested ( ) ;
489495 }
490496 }
491497
@@ -496,7 +502,7 @@ protected override async ValueTask DisposeAsync(bool disposing)
496502 {
497503 if ( disposed )
498504 return ;
499-
505+
500506 try
501507 {
502508 // Explicitly pick up a potentially methodimpl'ed DisposeAsync
@@ -507,6 +513,7 @@ protected override async ValueTask DisposeAsync(bool disposing)
507513 {
508514 await ( ( IAsyncDisposable ) _stream ) . DisposeAsync ( ) ;
509515 }
516+ cts . Dispose ( ) ;
510517 }
511518 }
512519 finally
@@ -531,6 +538,7 @@ protected override void Dispose(bool disposing)
531538 {
532539 ( ( IDisposable ) _stream ) . Dispose ( ) ;
533540 }
541+ cts . Dispose ( ) ;
534542
535543 }
536544 }
@@ -544,7 +552,7 @@ protected override void Dispose(bool disposing)
544552 }
545553 }
546554
547- #pragma warning restore S3881
555+ #pragma warning restore S3881
548556
549557 /// <summary>
550558 /// AsyncStream class extensions
0 commit comments