ETTask.cs 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. using System.Diagnostics;
  2. using System.Runtime.CompilerServices;
  3. namespace ET
  4. {
  5. [AsyncMethodBuilder(typeof (ETAsyncTaskMethodBuilder))]
  6. public struct ETTask
  7. {
  8. public static ETTaskCompleted CompletedTask => new ETTaskCompleted();
  9. private readonly ETTaskCompletionSource awaiter;
  10. [DebuggerHidden]
  11. public ETTask(ETTaskCompletionSource awaiter)
  12. {
  13. this.awaiter = awaiter;
  14. }
  15. [DebuggerHidden]
  16. public ETTaskCompletionSource GetAwaiter()
  17. {
  18. return this.awaiter;
  19. }
  20. [DebuggerHidden]
  21. public void Coroutine()
  22. {
  23. InnerCoroutine().Coroutine();
  24. }
  25. [DebuggerHidden]
  26. private async ETVoid InnerCoroutine()
  27. {
  28. await this;
  29. }
  30. }
  31. [AsyncMethodBuilder(typeof (ETAsyncTaskMethodBuilder<>))]
  32. public struct ETTask<T>
  33. {
  34. private readonly ETTaskCompletionSource<T> awaiter;
  35. [DebuggerHidden]
  36. public ETTask(ETTaskCompletionSource<T> awaiter)
  37. {
  38. this.awaiter = awaiter;
  39. }
  40. [DebuggerHidden]
  41. public ETTaskCompletionSource<T> GetAwaiter()
  42. {
  43. return this.awaiter;
  44. }
  45. [DebuggerHidden]
  46. public void Coroutine()
  47. {
  48. InnerCoroutine().Coroutine();
  49. }
  50. private async ETVoid InnerCoroutine()
  51. {
  52. await this;
  53. }
  54. }
  55. }