@@ -15,14 +15,14 @@ namespace Microsoft.Data.SqlClient.SNI
15
15
/// </summary>
16
16
internal class SNISslStream : SslStream
17
17
{
18
- private readonly SemaphoreSlim _writeAsyncSemaphore ;
19
- private readonly SemaphoreSlim _readAsyncSemaphore ;
18
+ private readonly ConcurrentQueueSemaphore _writeAsyncSemaphore ;
19
+ private readonly ConcurrentQueueSemaphore _readAsyncSemaphore ;
20
20
21
21
public SNISslStream ( Stream innerStream , bool leaveInnerStreamOpen , RemoteCertificateValidationCallback userCertificateValidationCallback )
22
22
: base ( innerStream , leaveInnerStreamOpen , userCertificateValidationCallback )
23
23
{
24
- _writeAsyncSemaphore = new SemaphoreSlim ( 1 ) ;
25
- _readAsyncSemaphore = new SemaphoreSlim ( 1 ) ;
24
+ _writeAsyncSemaphore = new ConcurrentQueueSemaphore ( 1 ) ;
25
+ _readAsyncSemaphore = new ConcurrentQueueSemaphore ( 1 ) ;
26
26
}
27
27
28
28
// Prevent ReadAsync collisions by running the task in a Semaphore Slim
@@ -31,7 +31,7 @@ public override async Task<int> ReadAsync(byte[] buffer, int offset, int count,
31
31
await _readAsyncSemaphore . WaitAsync ( ) . ConfigureAwait ( false ) ;
32
32
try
33
33
{
34
- return await base . ReadAsync ( buffer , offset , count , cancellationToken ) ;
34
+ return await base . ReadAsync ( buffer , offset , count , cancellationToken ) . ConfigureAwait ( false ) ;
35
35
}
36
36
finally
37
37
{
@@ -45,7 +45,7 @@ public override async Task WriteAsync(byte[] buffer, int offset, int count, Canc
45
45
await _writeAsyncSemaphore . WaitAsync ( ) . ConfigureAwait ( false ) ;
46
46
try
47
47
{
48
- await base . WriteAsync ( buffer , offset , count , cancellationToken ) ;
48
+ await base . WriteAsync ( buffer , offset , count , cancellationToken ) . ConfigureAwait ( false ) ;
49
49
}
50
50
finally
51
51
{
@@ -59,22 +59,22 @@ public override async Task WriteAsync(byte[] buffer, int offset, int count, Canc
59
59
/// </summary>
60
60
internal class SNINetworkStream : NetworkStream
61
61
{
62
- private readonly SemaphoreSlim _writeAsyncSemaphore ;
63
- private readonly SemaphoreSlim _readAsyncSemaphore ;
62
+ private readonly ConcurrentQueueSemaphore _writeAsyncSemaphore ;
63
+ private readonly ConcurrentQueueSemaphore _readAsyncSemaphore ;
64
64
65
65
public SNINetworkStream ( Socket socket , bool ownsSocket ) : base ( socket , ownsSocket )
66
66
{
67
- _writeAsyncSemaphore = new SemaphoreSlim ( 1 ) ;
68
- _readAsyncSemaphore = new SemaphoreSlim ( 1 ) ;
67
+ _writeAsyncSemaphore = new ConcurrentQueueSemaphore ( 1 ) ;
68
+ _readAsyncSemaphore = new ConcurrentQueueSemaphore ( 1 ) ;
69
69
}
70
70
71
- // Prevent the ReadAsync collisions by running the task in a Semaphore Slim
71
+ // Prevent ReadAsync collisions by running the task in a Semaphore Slim
72
72
public override async Task < int > ReadAsync ( byte [ ] buffer , int offset , int count , CancellationToken cancellationToken )
73
73
{
74
74
await _readAsyncSemaphore . WaitAsync ( ) . ConfigureAwait ( false ) ;
75
75
try
76
76
{
77
- return await base . ReadAsync ( buffer , offset , count , cancellationToken ) ;
77
+ return await base . ReadAsync ( buffer , offset , count , cancellationToken ) . ConfigureAwait ( false ) ;
78
78
}
79
79
finally
80
80
{
@@ -88,7 +88,7 @@ public override async Task WriteAsync(byte[] buffer, int offset, int count, Canc
88
88
await _writeAsyncSemaphore . WaitAsync ( ) . ConfigureAwait ( false ) ;
89
89
try
90
90
{
91
- await base . WriteAsync ( buffer , offset , count , cancellationToken ) ;
91
+ await base . WriteAsync ( buffer , offset , count , cancellationToken ) . ConfigureAwait ( false ) ;
92
92
}
93
93
finally
94
94
{
0 commit comments