SynchronizationContextAwaiter.cs 611 B

12345678910111213141516171819202122
  1. using System;
  2. using System.Runtime.CompilerServices;
  3. using System.Threading;
  4. namespace UnityAsync.Awaiters
  5. {
  6. public struct SynchronizationContextAwaiter : INotifyCompletion
  7. {
  8. static readonly SendOrPostCallback postCallback = state => ((Action)state)();
  9. readonly SynchronizationContext context;
  10. public SynchronizationContextAwaiter(SynchronizationContext context)
  11. {
  12. this.context = context;
  13. }
  14. public bool IsCompleted => context == SynchronizationContext.Current;
  15. public void OnCompleted(Action continuation) => context.Post(postCallback, continuation);
  16. public void GetResult() { }
  17. }
  18. }