IAwaiter.cs 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. using System.Runtime.CompilerServices;
  2. namespace ETModel
  3. {
  4. public enum AwaiterStatus
  5. {
  6. /// <summary>The operation has not yet completed.</summary>
  7. Pending = 0,
  8. /// <summary>The operation completed successfully.</summary>
  9. Succeeded = 1,
  10. /// <summary>The operation completed with an error.</summary>
  11. Faulted = 2,
  12. /// <summary>The operation completed due to cancellation.</summary>
  13. Canceled = 3
  14. }
  15. public interface IAwaiter: ICriticalNotifyCompletion
  16. {
  17. AwaiterStatus Status { get; }
  18. bool IsCompleted { get; }
  19. void GetResult();
  20. }
  21. public interface IAwaiter<out T>: IAwaiter
  22. {
  23. new T GetResult();
  24. }
  25. public static class AwaiterStatusExtensions
  26. {
  27. /// <summary>!= Pending.</summary>
  28. [MethodImpl(MethodImplOptions.AggressiveInlining)]
  29. public static bool IsCompleted(this AwaiterStatus status)
  30. {
  31. return status != AwaiterStatus.Pending;
  32. }
  33. /// <summary>== Succeeded.</summary>
  34. [MethodImpl(MethodImplOptions.AggressiveInlining)]
  35. public static bool IsCompletedSuccessfully(this AwaiterStatus status)
  36. {
  37. return status == AwaiterStatus.Succeeded;
  38. }
  39. /// <summary>== Canceled.</summary>
  40. [MethodImpl(MethodImplOptions.AggressiveInlining)]
  41. public static bool IsCanceled(this AwaiterStatus status)
  42. {
  43. return status == AwaiterStatus.Canceled;
  44. }
  45. /// <summary>== Faulted.</summary>
  46. [MethodImpl(MethodImplOptions.AggressiveInlining)]
  47. public static bool IsFaulted(this AwaiterStatus status)
  48. {
  49. return status == AwaiterStatus.Faulted;
  50. }
  51. }
  52. }