diff options
author | Stephen Toub <stoub@microsoft.com> | 2018-04-06 20:27:21 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-04-06 20:27:21 +0300 |
commit | 3b834c49b451fc23e04c9233d9c008e693a4fc9b (patch) | |
tree | 7b753dd3006ed16a519a03bc9753fa80a2082114 /src | |
parent | f5d31619f821e7b4a0bcf7f648fe1dc2e4e2f09f (diff) |
Add a few tests for Task.Yield in async methods (#28887)
Diffstat (limited to 'src')
-rw-r--r-- | src/System.Threading.Tasks/tests/System.Runtime.CompilerServices/YieldAwaitableTests.cs | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/src/System.Threading.Tasks/tests/System.Runtime.CompilerServices/YieldAwaitableTests.cs b/src/System.Threading.Tasks/tests/System.Runtime.CompilerServices/YieldAwaitableTests.cs index 852de99779..92ffdc4ab9 100644 --- a/src/System.Threading.Tasks/tests/System.Runtime.CompilerServices/YieldAwaitableTests.cs +++ b/src/System.Threading.Tasks/tests/System.Runtime.CompilerServices/YieldAwaitableTests.cs @@ -143,8 +143,38 @@ namespace System.Threading.Tasks.Tests SynchronizationContext.SetSynchronizationContext(new ValidateCorrectContextSynchronizationContext()); var ya = Task.Yield().GetAwaiter(); Assert.Throws<ArgumentNullException>(() => { ya.OnCompleted(null); }); + SynchronizationContext.SetSynchronizationContext(null); } + [Fact] + public static async Task AsyncMethod_Yields_ReturnsToDefaultTaskScheduler() + { + await Task.Yield(); + Assert.Same(TaskScheduler.Default, TaskScheduler.Current); + } + + [Fact] + public static async Task AsyncMethod_Yields_ReturnsToCorrectTaskScheduler() + { + QUWITaskScheduler ts = new QUWITaskScheduler(); + Assert.NotSame(ts, TaskScheduler.Current); + await Task.Factory.StartNew(async delegate + { + Assert.Same(ts, TaskScheduler.Current); + await Task.Yield(); + Assert.Same(ts, TaskScheduler.Current); + }, CancellationToken.None, TaskCreationOptions.None, ts).Unwrap(); + Assert.NotSame(ts, TaskScheduler.Current); + } + + [Fact] + public static async Task AsyncMethod_Yields_ReturnsToCorrectSynchronizationContext() + { + var sc = new ValidateCorrectContextSynchronizationContext (); + SynchronizationContext.SetSynchronizationContext(sc); + await Task.Yield(); + Assert.Equal(1, sc.PostCount); + } #region Helper Methods / Classes private class ValidateCorrectContextSynchronizationContext : SynchronizationContext |