@@ -473,23 +473,26 @@ await ExpectAsync(Http2FrameType.DATA,
473
473
[ Fact ]
474
474
public async Task DATA_Received_Multiplexed_AppMustNotBlockOtherFrames ( )
475
475
{
476
- var stream1Read = new ManualResetEvent ( false ) ;
477
- var stream1ReadFinished = new ManualResetEvent ( false ) ;
478
- var stream3Read = new ManualResetEvent ( false ) ;
479
- var stream3ReadFinished = new ManualResetEvent ( false ) ;
476
+ var stream1Read = new TaskCompletionSource < object > ( TaskCreationOptions . RunContinuationsAsynchronously ) ;
477
+ var stream1ReadFinished = new TaskCompletionSource < object > ( TaskCreationOptions . RunContinuationsAsynchronously ) ;
478
+ var stream3Read = new TaskCompletionSource < object > ( TaskCreationOptions . RunContinuationsAsynchronously ) ;
479
+ var stream3ReadFinished = new TaskCompletionSource < object > ( TaskCreationOptions . RunContinuationsAsynchronously ) ;
480
+
480
481
await InitializeConnectionAsync ( async context =>
481
482
{
482
483
var data = new byte [ 10 ] ;
483
484
var read = await context . Request . Body . ReadAsync ( new byte [ 10 ] , 0 , 10 ) ;
484
485
if ( context . Features . Get < IHttp2StreamIdFeature > ( ) . StreamId == 1 )
485
486
{
486
- stream1Read . Set ( ) ;
487
- Assert . True ( stream1ReadFinished . WaitOne ( TimeSpan . FromSeconds ( 10 ) ) ) ;
487
+ stream1Read . TrySetResult ( null ) ;
488
+
489
+ await stream1ReadFinished . Task . DefaultTimeout ( ) ;
488
490
}
489
491
else
490
492
{
491
- stream3Read . Set ( ) ;
492
- Assert . True ( stream3ReadFinished . WaitOne ( TimeSpan . FromSeconds ( 10 ) ) ) ;
493
+ stream3Read . TrySetResult ( null ) ;
494
+
495
+ await stream3ReadFinished . Task . DefaultTimeout ( ) ;
493
496
}
494
497
await context . Response . Body . WriteAsync ( data , 0 , read ) ;
495
498
} ) ;
@@ -498,12 +501,12 @@ await InitializeConnectionAsync(async context =>
498
501
await StartStreamAsync ( 3 , _browserRequestHeaders , endStream : false ) ;
499
502
500
503
await SendDataAsync ( 1 , _helloBytes , endStream : true ) ;
501
- Assert . True ( stream1Read . WaitOne ( TimeSpan . FromSeconds ( 10 ) ) ) ;
504
+ await stream1Read . Task . DefaultTimeout ( ) ;
502
505
503
506
await SendDataAsync ( 3 , _helloBytes , endStream : true ) ;
504
- Assert . True ( stream3Read . WaitOne ( TimeSpan . FromSeconds ( 10 ) ) ) ;
507
+ await stream3Read . Task . DefaultTimeout ( ) ;
505
508
506
- stream3ReadFinished . Set ( ) ;
509
+ stream3ReadFinished . TrySetResult ( null ) ;
507
510
508
511
await ExpectAsync ( Http2FrameType . HEADERS ,
509
512
withLength : 37 ,
@@ -518,7 +521,7 @@ await ExpectAsync(Http2FrameType.DATA,
518
521
withFlags : ( byte ) Http2DataFrameFlags . END_STREAM ,
519
522
withStreamId : 3 ) ;
520
523
521
- stream1ReadFinished . Set ( ) ;
524
+ stream1ReadFinished . TrySetResult ( null ) ;
522
525
523
526
await ExpectAsync ( Http2FrameType . HEADERS ,
524
527
withLength : 37 ,
@@ -1197,33 +1200,36 @@ await ExpectAsync(Http2FrameType.DATA,
1197
1200
[ Fact ]
1198
1201
public async Task HEADERS_Received_AppCannotBlockOtherFrames ( )
1199
1202
{
1200
- var firstRequestReceived = new ManualResetEvent ( false ) ;
1201
- var finishFirstRequest = new ManualResetEvent ( false ) ;
1202
- var secondRequestReceived = new ManualResetEvent ( false ) ;
1203
- var finishSecondRequest = new ManualResetEvent ( false ) ;
1204
- await InitializeConnectionAsync ( context =>
1203
+ var firstRequestReceived = new TaskCompletionSource < object > ( TaskCreationOptions . RunContinuationsAsynchronously ) ;
1204
+ var finishFirstRequest = new TaskCompletionSource < object > ( TaskCreationOptions . RunContinuationsAsynchronously ) ;
1205
+ var secondRequestReceived = new TaskCompletionSource < object > ( TaskCreationOptions . RunContinuationsAsynchronously ) ;
1206
+ var finishSecondRequest = new TaskCompletionSource < object > ( TaskCreationOptions . RunContinuationsAsynchronously ) ;
1207
+
1208
+ await InitializeConnectionAsync ( async context =>
1205
1209
{
1206
- if ( ! firstRequestReceived . WaitOne ( 0 ) )
1210
+ if ( ! firstRequestReceived . Task . IsCompleted )
1207
1211
{
1208
- firstRequestReceived . Set ( ) ;
1209
- Assert . True ( finishFirstRequest . WaitOne ( TimeSpan . FromSeconds ( 10 ) ) ) ;
1212
+ firstRequestReceived . TrySetResult ( null ) ;
1213
+
1214
+ await finishFirstRequest . Task . DefaultTimeout ( ) ;
1210
1215
}
1211
1216
else
1212
1217
{
1213
- secondRequestReceived . Set ( ) ;
1214
- Assert . True ( finishSecondRequest . WaitOne ( TimeSpan . FromSeconds ( 10 ) ) ) ;
1215
- }
1218
+ secondRequestReceived . TrySetResult ( null ) ;
1216
1219
1217
- return Task . CompletedTask ;
1220
+ await finishSecondRequest . Task . DefaultTimeout ( ) ;
1221
+ }
1218
1222
} ) ;
1219
1223
1220
1224
await StartStreamAsync ( 1 , _browserRequestHeaders , endStream : true ) ;
1221
- Assert . True ( firstRequestReceived . WaitOne ( TimeSpan . FromSeconds ( 10 ) ) ) ;
1225
+
1226
+ await firstRequestReceived . Task . DefaultTimeout ( ) ;
1222
1227
1223
1228
await StartStreamAsync ( 3 , _browserRequestHeaders , endStream : true ) ;
1224
- Assert . True ( secondRequestReceived . WaitOne ( TimeSpan . FromSeconds ( 10 ) ) ) ;
1225
1229
1226
- finishSecondRequest . Set ( ) ;
1230
+ await secondRequestReceived . Task . DefaultTimeout ( ) ;
1231
+
1232
+ finishSecondRequest . TrySetResult ( null ) ;
1227
1233
1228
1234
await ExpectAsync ( Http2FrameType . HEADERS ,
1229
1235
withLength : 55 ,
@@ -1234,7 +1240,7 @@ await ExpectAsync(Http2FrameType.DATA,
1234
1240
withFlags : ( byte ) Http2DataFrameFlags . END_STREAM ,
1235
1241
withStreamId : 3 ) ;
1236
1242
1237
- finishFirstRequest . Set ( ) ;
1243
+ finishFirstRequest . TrySetResult ( null ) ;
1238
1244
1239
1245
await ExpectAsync ( Http2FrameType . HEADERS ,
1240
1246
withLength : 55 ,
@@ -1255,7 +1261,7 @@ public async Task HEADERS_OverMaxStreamLimit_Refused()
1255
1261
1256
1262
_connection . ServerSettings . MaxConcurrentStreams = 1 ;
1257
1263
1258
- var requestBlocker = new TaskCompletionSource < object > ( ) ;
1264
+ var requestBlocker = new TaskCompletionSource < object > ( TaskCreationOptions . RunContinuationsAsynchronously ) ;
1259
1265
await InitializeConnectionAsync ( context => requestBlocker . Task ) ;
1260
1266
1261
1267
await StartStreamAsync ( 1 , _browserRequestHeaders , endStream : true ) ;
@@ -1665,7 +1671,7 @@ public Task HEADERS_Received_TooManyHeaders_ConnectionError()
1665
1671
{
1666
1672
// > MaxRequestHeaderCount (100)
1667
1673
var headers = new List < KeyValuePair < string , string > > ( ) ;
1668
- headers . AddRange ( new [ ]
1674
+ headers . AddRange ( new [ ]
1669
1675
{
1670
1676
new KeyValuePair < string , string > ( HeaderNames . Method , "GET" ) ,
1671
1677
new KeyValuePair < string , string > ( HeaderNames . Path , "/" ) ,
@@ -3863,7 +3869,7 @@ public async Task AbortedStream_ResetsAndDrainsRequest_RefusesFramesAfterEndOfSt
3863
3869
await SendDataAsync ( 1 , new byte [ 100 ] , endStream : true ) ;
3864
3870
// An extra one to break it
3865
3871
await SendDataAsync ( 1 , new byte [ 100 ] , endStream : true ) ;
3866
-
3872
+
3867
3873
// There's a race where either of these messages could be logged, depending on if the stream cleanup has finished yet.
3868
3874
await WaitForConnectionErrorAsync < Http2ConnectionErrorException > (
3869
3875
ignoreNonGoAwayFrames : false ,
0 commit comments