Skip to content

Commit b08163d

Browse files
authored
[2.1.1] Use TaskCreationOptions.RunContinuationsAsynchronously a lot (#2618)
1 parent 67afccf commit b08163d

10 files changed

+66
-72
lines changed

test/Kestrel.FunctionalTests/ConnectionLimitTests.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,9 @@ public class ConnectionLimitTests : LoggedTest
2222
[Fact]
2323
public async Task ResetsCountWhenConnectionClosed()
2424
{
25-
var requestTcs = new TaskCompletionSource<object>();
26-
var releasedTcs = new TaskCompletionSource<object>();
27-
var lockedTcs = new TaskCompletionSource<bool>();
25+
var requestTcs = new TaskCompletionSource<object>(TaskCreationOptions.RunContinuationsAsynchronously);
26+
var releasedTcs = new TaskCompletionSource<object>(TaskCreationOptions.RunContinuationsAsynchronously);
27+
var lockedTcs = new TaskCompletionSource<bool>(TaskCreationOptions.RunContinuationsAsynchronously);
2828
var counter = new EventRaisingResourceCounter(ResourceCounter.Quota(1));
2929
counter.OnLock += (s, e) => lockedTcs.TrySetResult(e);
3030
counter.OnRelease += (s, e) => releasedTcs.TrySetResult(null);
@@ -95,7 +95,7 @@ public async Task UpgradedConnectionsCountsAgainstDifferentLimit()
9595
public async Task RejectsConnectionsWhenLimitReached()
9696
{
9797
const int max = 10;
98-
var requestTcs = new TaskCompletionSource<object>();
98+
var requestTcs = new TaskCompletionSource<object>(TaskCreationOptions.RunContinuationsAsynchronously);
9999

100100
using (var server = CreateServerWithMaxConnections(async context =>
101101
{
@@ -140,8 +140,8 @@ public async Task ConnectionCountingReturnsToZero()
140140
const int count = 100;
141141
var opened = 0;
142142
var closed = 0;
143-
var openedTcs = new TaskCompletionSource<object>();
144-
var closedTcs = new TaskCompletionSource<object>();
143+
var openedTcs = new TaskCompletionSource<object>(TaskCreationOptions.RunContinuationsAsynchronously);
144+
var closedTcs = new TaskCompletionSource<object>(TaskCreationOptions.RunContinuationsAsynchronously);
145145

146146
var counter = new EventRaisingResourceCounter(ResourceCounter.Quota(uint.MaxValue));
147147

test/Kestrel.FunctionalTests/HttpConnectionManagerTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ public async Task CriticalErrorLoggedIfApplicationDoesntComplete()
4242
using (var server = new TestServer(context =>
4343
{
4444
appStartedWh.Release();
45-
var tcs = new TaskCompletionSource<object>();
45+
var tcs = new TaskCompletionSource<object>(TaskCreationOptions.RunContinuationsAsynchronously);
4646
return tcs.Task;
4747
},
4848
new TestServiceContext(new LoggerFactory(), mockTrace.Object)))

test/Kestrel.FunctionalTests/HttpsTests.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -253,7 +253,7 @@ await sslStream.AuthenticateAsClientAsync("127.0.0.1", clientCertificates: null,
253253
[Fact]
254254
public async Task DoesNotThrowObjectDisposedExceptionFromWriteAsyncAfterConnectionIsAborted()
255255
{
256-
var tcs = new TaskCompletionSource<object>();
256+
var tcs = new TaskCompletionSource<object>(TaskCreationOptions.RunContinuationsAsynchronously);
257257
var loggerProvider = new HandshakeErrorLoggerProvider();
258258
LoggerFactory.AddProvider(loggerProvider);
259259
var hostBuilder = TransportSelector.GetWebHostBuilder()
@@ -441,13 +441,13 @@ private class HttpsConnectionFilterLogger : ILogger
441441
{
442442
public LogLevel LastLogLevel { get; set; }
443443
public EventId LastEventId { get; set; }
444-
public TaskCompletionSource<object> LogTcs { get; } = new TaskCompletionSource<object>();
444+
public TaskCompletionSource<object> LogTcs { get; } = new TaskCompletionSource<object>(TaskCreationOptions.RunContinuationsAsynchronously);
445445

446446
public void Log<TState>(LogLevel logLevel, EventId eventId, TState state, Exception exception, Func<TState, Exception, string> formatter)
447447
{
448448
LastLogLevel = logLevel;
449449
LastEventId = eventId;
450-
Task.Run(() => LogTcs.SetResult(null));
450+
LogTcs.SetResult(null);
451451
}
452452

453453
public bool IsEnabled(LogLevel logLevel)

test/Kestrel.FunctionalTests/MaxRequestBufferSizeTests.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -89,8 +89,8 @@ public async Task LargeUpload(long? maxRequestBufferSize, bool connectionAdapter
8989
// Initialize data with random bytes
9090
(new Random()).NextBytes(data);
9191

92-
var startReadingRequestBody = new TaskCompletionSource<object>();
93-
var clientFinishedSendingRequestBody = new TaskCompletionSource<object>();
92+
var startReadingRequestBody = new TaskCompletionSource<object>(TaskCreationOptions.RunContinuationsAsynchronously);
93+
var clientFinishedSendingRequestBody = new TaskCompletionSource<object>(TaskCreationOptions.RunContinuationsAsynchronously);
9494
var lastBytesWritten = DateTime.MaxValue;
9595

9696
using (var host = StartWebHost(maxRequestBufferSize, data, connectionAdapter, startReadingRequestBody, clientFinishedSendingRequestBody))
@@ -181,8 +181,8 @@ public async Task ServerShutsDownGracefullyWhenMaxRequestBufferSizeExceeded()
181181
var bytesWrittenPollingInterval = TimeSpan.FromMilliseconds(bytesWrittenTimeout.TotalMilliseconds / 10);
182182
var maxSendSize = 4096;
183183

184-
var startReadingRequestBody = new TaskCompletionSource<object>();
185-
var clientFinishedSendingRequestBody = new TaskCompletionSource<object>();
184+
var startReadingRequestBody = new TaskCompletionSource<object>(TaskCreationOptions.RunContinuationsAsynchronously);
185+
var clientFinishedSendingRequestBody = new TaskCompletionSource<object>(TaskCreationOptions.RunContinuationsAsynchronously);
186186
var lastBytesWritten = DateTime.MaxValue;
187187

188188
using (var host = StartWebHost(16 * 1024, data, false, startReadingRequestBody, clientFinishedSendingRequestBody))

test/Kestrel.FunctionalTests/RequestTests.cs

Lines changed: 15 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -578,8 +578,8 @@ public void AbortingTheConnectionSendsFIN()
578578
public async Task ConnectionClosedTokenFiresOnClientFIN(ListenOptions listenOptions)
579579
{
580580
var testContext = new TestServiceContext(LoggerFactory);
581-
var appStartedTcs = new TaskCompletionSource<object>();
582-
var connectionClosedTcs = new TaskCompletionSource<object>();
581+
var appStartedTcs = new TaskCompletionSource<object>(TaskCreationOptions.RunContinuationsAsynchronously);
582+
var connectionClosedTcs = new TaskCompletionSource<object>(TaskCreationOptions.RunContinuationsAsynchronously);
583583

584584
using (var server = new TestServer(context =>
585585
{
@@ -613,7 +613,7 @@ await connection.Send(
613613
public async Task ConnectionClosedTokenFiresOnServerFIN(ListenOptions listenOptions)
614614
{
615615
var testContext = new TestServiceContext(LoggerFactory);
616-
var connectionClosedTcs = new TaskCompletionSource<object>();
616+
var connectionClosedTcs = new TaskCompletionSource<object>(TaskCreationOptions.RunContinuationsAsynchronously);
617617

618618
using (var server = new TestServer(context =>
619619
{
@@ -649,7 +649,7 @@ await connection.ReceiveEnd($"HTTP/1.1 200 OK",
649649
public async Task ConnectionClosedTokenFiresOnServerAbort(ListenOptions listenOptions)
650650
{
651651
var testContext = new TestServiceContext(LoggerFactory);
652-
var connectionClosedTcs = new TaskCompletionSource<object>();
652+
var connectionClosedTcs = new TaskCompletionSource<object>(TaskCreationOptions.RunContinuationsAsynchronously);
653653

654654
using (var server = new TestServer(context =>
655655
{
@@ -694,9 +694,9 @@ await connection.Send(
694694
[InlineData("http://localhost/path%20with%20space?q=abc%20123", "/path with space", "abc 123")]
695695
public async Task CanHandleRequestsWithUrlInAbsoluteForm(string requestUrl, string expectedPath, string queryValue)
696696
{
697-
var pathTcs = new TaskCompletionSource<PathString>();
698-
var rawTargetTcs = new TaskCompletionSource<string>();
699-
var queryTcs = new TaskCompletionSource<IQueryCollection>();
697+
var pathTcs = new TaskCompletionSource<PathString>(TaskCreationOptions.RunContinuationsAsynchronously);
698+
var rawTargetTcs = new TaskCompletionSource<string>(TaskCreationOptions.RunContinuationsAsynchronously);
699+
var queryTcs = new TaskCompletionSource<IQueryCollection>(TaskCreationOptions.RunContinuationsAsynchronously);
700700

701701
using (var server = new TestServer(async context =>
702702
{
@@ -1135,8 +1135,8 @@ public async Task RequestsCanBeAbortedMidRead(ListenOptions listenOptions)
11351135
{
11361136
var testContext = new TestServiceContext(LoggerFactory);
11371137

1138-
var readTcs = new TaskCompletionSource<object>();
1139-
var registrationTcs = new TaskCompletionSource<int>();
1138+
var readTcs = new TaskCompletionSource<object>(TaskCreationOptions.RunContinuationsAsynchronously);
1139+
var registrationTcs = new TaskCompletionSource<int>(TaskCreationOptions.RunContinuationsAsynchronously);
11401140
var requestId = 0;
11411141

11421142
using (var server = new TestServer(async httpContext =>
@@ -1217,10 +1217,10 @@ public async Task ServerCanAbortConnectionAfterUnobservedClose(ListenOptions lis
12171217
const int connectionFinSentEventId = 7;
12181218
const int maxRequestBufferSize = 4096;
12191219

1220-
var readCallbackUnwired = new TaskCompletionSource<object>(TaskContinuationOptions.RunContinuationsAsynchronously);
1221-
var clientClosedConnection = new TaskCompletionSource<object>(TaskContinuationOptions.RunContinuationsAsynchronously);
1222-
var serverClosedConnection = new TaskCompletionSource<object>(TaskContinuationOptions.RunContinuationsAsynchronously);
1223-
var appFuncCompleted = new TaskCompletionSource<object>(TaskContinuationOptions.RunContinuationsAsynchronously);
1220+
var readCallbackUnwired = new TaskCompletionSource<object>(TaskCreationOptions.RunContinuationsAsynchronously);
1221+
var clientClosedConnection = new TaskCompletionSource<object>(TaskCreationOptions.RunContinuationsAsynchronously);
1222+
var serverClosedConnection = new TaskCompletionSource<object>(TaskCreationOptions.RunContinuationsAsynchronously);
1223+
var appFuncCompleted = new TaskCompletionSource<object>(TaskCreationOptions.RunContinuationsAsynchronously);
12241224

12251225
var mockLogger = new Mock<ILogger>();
12261226
mockLogger
@@ -1276,9 +1276,7 @@ public async Task ServerCanAbortConnectionAfterUnobservedClose(ListenOptions lis
12761276

12771277
await serverClosedConnection.Task;
12781278

1279-
// TaskContinuationOptions.RunContinuationsAsynchronously sometimes runs inline anyway in
1280-
// situations such as this where the awaiter starts awaiting right when SetResult is called.
1281-
_ = Task.Run(() => appFuncCompleted.SetResult(null));
1279+
appFuncCompleted.SetResult(null);
12821280
}, testContext, listenOptions))
12831281
{
12841282
using (var connection = server.CreateConnection())
@@ -1308,7 +1306,7 @@ await connection.Send(
13081306
[MemberData(nameof(ConnectionAdapterData))]
13091307
public async Task AppCanHandleClientAbortingConnectionMidRequest(ListenOptions listenOptions)
13101308
{
1311-
var readTcs = new TaskCompletionSource<Exception>(TaskContinuationOptions.RunContinuationsAsynchronously);
1309+
var readTcs = new TaskCompletionSource<Exception>(TaskCreationOptions.RunContinuationsAsynchronously);
13121310

13131311
var mockKestrelTrace = new Mock<KestrelTrace>(Logger) { CallBase = true };
13141312
var testContext = new TestServiceContext()

0 commit comments

Comments
 (0)