Skip to content

Commit c594abc

Browse files
committed
Suspend test synchronization context
1 parent facaa62 commit c594abc

File tree

4 files changed

+22
-18
lines changed

4 files changed

+22
-18
lines changed

src/DotNext.Tests/Runtime/CompilerServices/SpawningAsyncTaskMethodBuilderTests.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ public sealed class SpawningAsyncTaskMethodBuilderTests : Test
99
public static async Task ForkAsyncMethodWithResult()
1010
{
1111
var resetEvent = new TaskCompletionSource();
12-
var task = SuspendContext(() => Sum(40, 2, Thread.CurrentThread.ManagedThreadId));
12+
var task = Sum(40, 2, Thread.CurrentThread.ManagedThreadId);
1313
await resetEvent.Task.WaitAsync(DefaultTimeout);
1414

1515
Equal(42, await task);
@@ -29,7 +29,7 @@ async Task<int> Sum(int x, int y, int callerThreadId)
2929
public static async Task ForkAsyncMethodWithoutResult()
3030
{
3131
var resetEvent = new TaskCompletionSource();
32-
var task = SuspendContext(() => CheckThreadId(Thread.CurrentThread.ManagedThreadId));
32+
var task = CheckThreadId(Thread.CurrentThread.ManagedThreadId);
3333
await resetEvent.Task.WaitAsync(DefaultTimeout);
3434

3535
await task;
@@ -48,7 +48,7 @@ async Task CheckThreadId(int callerThreadId)
4848
public static async Task CancellationOfSpawnedMethod()
4949
{
5050
var resetEvent = new TaskCompletionSource();
51-
var task = SuspendContext(() => CheckThreadId(Thread.CurrentThread.ManagedThreadId, new(true)));
51+
var task = CheckThreadId(Thread.CurrentThread.ManagedThreadId, new(true));
5252
await resetEvent.Task.WaitAsync(DefaultTimeout);
5353

5454
await task.ConfigureAwait(ConfigureAwaitOptions.ContinueOnCapturedContext | ConfigureAwaitOptions.SuppressThrowing);

src/DotNext.Tests/Test.cs

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -45,18 +45,4 @@ private protected static ReadOnlySequence<T> ToReadOnlySequence<T>(ReadOnlyMemor
4545
private protected static Action<T> Same<T>(T expected)
4646
where T : class
4747
=> actual => Same(expected, actual);
48-
49-
protected static TResult SuspendContext<TResult>(Func<TResult> func)
50-
{
51-
var currentContext = SynchronizationContext.Current;
52-
SynchronizationContext.SetSynchronizationContext(null);
53-
try
54-
{
55-
return func();
56-
}
57-
finally
58-
{
59-
SynchronizationContext.SetSynchronizationContext(currentContext);
60-
}
61-
}
6248
}

src/DotNext.Tests/Threading/Leases/LeaseTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,7 @@ public static async Task WorkerProtectedWithLease()
132132
await using var consumer = new TestLeaseConsumer(provider);
133133
True(await consumer.TryAcquireAsync());
134134

135-
var result = await SuspendContext(() => consumer.ExecuteAsync(Worker));
135+
var result = await consumer.ExecuteAsync(Worker);
136136
Equal(42, result);
137137

138138
static async Task<int> Worker(CancellationToken token)

src/DotNext/Runtime/CompilerServices/SpawningTaskMethodBuilder.cs

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,17 @@ public struct SpawningAsyncTaskMethodBuilder<TResult>()
3131
public void Start<TStateMachine>(ref TStateMachine stateMachine)
3232
where TStateMachine : IAsyncStateMachine
3333
{
34+
#if DEBUG
35+
var currentContext = SynchronizationContext.Current;
36+
SynchronizationContext.SetSynchronizationContext(null);
37+
#endif
38+
3439
var awaiter = System.Threading.Tasks.Task.Yield().GetAwaiter();
3540
builder.AwaitUnsafeOnCompleted(ref awaiter, ref stateMachine);
41+
42+
#if DEBUG
43+
SynchronizationContext.SetSynchronizationContext(currentContext);
44+
#endif
3645
}
3746

3847
/// <summary>
@@ -114,8 +123,17 @@ public struct SpawningAsyncTaskMethodBuilder()
114123
public void Start<TStateMachine>(ref TStateMachine stateMachine)
115124
where TStateMachine : IAsyncStateMachine
116125
{
126+
#if DEBUG
127+
var currentContext = SynchronizationContext.Current;
128+
SynchronizationContext.SetSynchronizationContext(null);
129+
#endif
130+
117131
var awaiter = Task.Yield().GetAwaiter();
118132
builder.AwaitUnsafeOnCompleted(ref awaiter, ref stateMachine);
133+
134+
#if DEBUG
135+
SynchronizationContext.SetSynchronizationContext(currentContext);
136+
#endif
119137
}
120138

121139
/// <summary>

0 commit comments

Comments
 (0)