ETTaskFactory.cs 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. using System;
  2. using System.Threading;
  3. namespace ETModel
  4. {
  5. public partial struct ETTask
  6. {
  7. public static ETTask CompletedTask => new ETTask();
  8. public static ETTask FromException(Exception ex)
  9. {
  10. ETTaskCompletionSource tcs = new ETTaskCompletionSource();
  11. tcs.TrySetException(ex);
  12. return tcs.Task;
  13. }
  14. public static ETTask<T> FromException<T>(Exception ex)
  15. {
  16. var tcs = new ETTaskCompletionSource<T>();
  17. tcs.TrySetException(ex);
  18. return tcs.Task;
  19. }
  20. public static ETTask<T> FromResult<T>(T value)
  21. {
  22. return new ETTask<T>(value);
  23. }
  24. public static ETTask FromCanceled()
  25. {
  26. return CanceledETTaskCache.Task;
  27. }
  28. public static ETTask<T> FromCanceled<T>()
  29. {
  30. return CanceledETTaskCache<T>.Task;
  31. }
  32. public static ETTask FromCanceled(CancellationToken token)
  33. {
  34. ETTaskCompletionSource tcs = new ETTaskCompletionSource();
  35. tcs.TrySetException(new OperationCanceledException(token));
  36. return tcs.Task;
  37. }
  38. public static ETTask<T> FromCanceled<T>(CancellationToken token)
  39. {
  40. var tcs = new ETTaskCompletionSource<T>();
  41. tcs.TrySetException(new OperationCanceledException(token));
  42. return tcs.Task;
  43. }
  44. private static class CanceledETTaskCache
  45. {
  46. public static readonly ETTask Task;
  47. static CanceledETTaskCache()
  48. {
  49. ETTaskCompletionSource tcs = new ETTaskCompletionSource();
  50. tcs.TrySetCanceled();
  51. Task = tcs.Task;
  52. }
  53. }
  54. private static class CanceledETTaskCache<T>
  55. {
  56. public static readonly ETTask<T> Task;
  57. static CanceledETTaskCache()
  58. {
  59. var taskCompletionSource = new ETTaskCompletionSource<T>();
  60. taskCompletionSource.TrySetCanceled();
  61. Task = taskCompletionSource.Task;
  62. }
  63. }
  64. }
  65. internal static class CompletedTasks
  66. {
  67. public static readonly ETTask<bool> True = ETTask.FromResult(true);
  68. public static readonly ETTask<bool> False = ETTask.FromResult(false);
  69. public static readonly ETTask<int> Zero = ETTask.FromResult(0);
  70. public static readonly ETTask<int> MinusOne = ETTask.FromResult(-1);
  71. public static readonly ETTask<int> One = ETTask.FromResult(1);
  72. }
  73. }