Skip to content

Commit facaa62

Browse files
committed
Suspend problematic xunit sync context
1 parent 0e22782 commit facaa62

File tree

3 files changed

+18
-4
lines changed

3 files changed

+18
-4
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 = Sum(40, 2, Thread.CurrentThread.ManagedThreadId);
12+
var task = SuspendContext(() => 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 = CheckThreadId(Thread.CurrentThread.ManagedThreadId);
32+
var task = SuspendContext(() => 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 = CheckThreadId(Thread.CurrentThread.ManagedThreadId, new(true));
51+
var task = SuspendContext(() => 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: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,4 +45,18 @@ 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+
}
4862
}

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 consumer.ExecuteAsync(Worker);
135+
var result = await SuspendContext(() => consumer.ExecuteAsync(Worker));
136136
Equal(42, result);
137137

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

0 commit comments

Comments
 (0)