Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- async void Form1_Load(object sender, EventArgs e)
- {
- // on the UI thread
- Debug.WriteLine(new { where = "before",
- Thread.CurrentThread.ManagedThreadId, Thread.CurrentThread.IsThreadPoolThread });
- var tcs = new TaskCompletionSource<bool>();
- this.BeginInvoke(new MethodInvoker(() => tcs.SetResult(true)));
- await tcs.Task.ContinueWith(t => {
- // still on the UI thread
- Debug.WriteLine(new { where = "ContinueWith",
- Thread.CurrentThread.ManagedThreadId, Thread.CurrentThread.IsThreadPoolThread });
- }, TaskContinuationOptions.ExecuteSynchronously).ConfigureAwait(false);
- // on a pool thread
- Debug.WriteLine(new { where = "after",
- Thread.CurrentThread.ManagedThreadId, Thread.CurrentThread.IsThreadPoolThread });
- }
- await
- await Task.Delay(100).ContinueWith(t =>
- {
- // on a pool thread
- Debug.WriteLine(new { where = "ContinueWith",
- Thread.CurrentThread.ManagedThreadId, Thread.CurrentThread.IsThreadPoolThread });
- }, TaskContinuationOptions.ExecuteSynchronously).ConfigureAwait(false);
- ConfiguredTaskAwaitable
- class DumbSyncContext: SynchronizationContext
- {
- }
- // ...
- Debug.WriteLine(new { where = "before",
- Thread.CurrentThread.ManagedThreadId,
- Thread.CurrentThread.IsThreadPoolThread });
- var tcs = new TaskCompletionSource<bool>();
- var thread = new Thread(() =>
- {
- Debug.WriteLine(new { where = "new Thread",
- Thread.CurrentThread.ManagedThreadId,
- Thread.CurrentThread.IsThreadPoolThread});
- SynchronizationContext.SetSynchronizationContext(new DumbSyncContext());
- tcs.SetResult(true);
- Thread.Sleep(1000);
- });
- thread.Start();
- await tcs.Task.ContinueWith(t => {
- Debug.WriteLine(new { where = "ContinueWith",
- Thread.CurrentThread.ManagedThreadId,
- Thread.CurrentThread.IsThreadPoolThread});
- }, TaskContinuationOptions.ExecuteSynchronously).ConfigureAwait(false);
- Debug.WriteLine(new { where = "after",
- Thread.CurrentThread.ManagedThreadId,
- Thread.CurrentThread.IsThreadPoolThread });
- SynchronizationContext
- await FooAsync().ConfigureAwait(false);
- static Task FooAsync(bool runSync)
- {
- if (!runSync)
- await Task.Delay(100);
- }
- await FooAsync(true).ConfigureAwait(false);
- await task.ConfigureAwait(false);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement