1
0

TaskExtensions.cs 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. // Licensed to the .NET Foundation under one or more agreements.
  2. // The .NET Foundation licenses this file to you under the MIT License.
  3. // See the LICENSE file in the project root for more information.
  4. namespace System.Threading.Tasks
  5. {
  6. internal static class TaskExtensions
  7. {
  8. public static Task ContinueWithState<TState>(this Task task, Action<Task, TState> continuationAction, TState state)
  9. {
  10. return task.ContinueWith(
  11. (t, tupleObject) =>
  12. {
  13. var (closureAction, closureState) = ((Action<Task, TState>, TState))tupleObject!;
  14. closureAction(t, closureState);
  15. },
  16. (continuationAction, state));
  17. }
  18. public static Task ContinueWithState<TState>(this Task task, Action<Task, TState> continuationAction, TState state, CancellationToken cancellationToken)
  19. {
  20. return task.ContinueWith(
  21. (t, tupleObject) =>
  22. {
  23. var (closureAction, closureState) = ((Action<Task, TState>, TState))tupleObject!;
  24. closureAction(t, closureState);
  25. },
  26. (continuationAction, state),
  27. cancellationToken);
  28. }
  29. public static Task ContinueWithState<TState>(this Task task, Action<Task, TState> continuationAction, TState state, TaskContinuationOptions continuationOptions)
  30. {
  31. return task.ContinueWith(
  32. (t, tupleObject) =>
  33. {
  34. var (closureAction, closureState) = ((Action<Task, TState>, TState))tupleObject!;
  35. closureAction(t, closureState);
  36. },
  37. (continuationAction, state),
  38. continuationOptions);
  39. }
  40. public static Task ContinueWithState<TState>(this Task task, Action<Task, TState> continuationAction, TState state, CancellationToken cancellationToken, TaskContinuationOptions continuationOptions)
  41. {
  42. return task.ContinueWith(
  43. (t, tupleObject) =>
  44. {
  45. var (closureAction, closureState) = ((Action<Task, TState>, TState))tupleObject!;
  46. closureAction(t, closureState);
  47. },
  48. (continuationAction, state),
  49. cancellationToken,
  50. continuationOptions,
  51. TaskScheduler.Default);
  52. }
  53. public static Task ContinueWithState<TResult, TState>(this Task<TResult> task, Action<Task<TResult>, TState> continuationAction, TState state)
  54. {
  55. return task.ContinueWith(
  56. (t, tupleObject) =>
  57. {
  58. var (closureAction, closureState) = ((Action<Task<TResult>, TState>, TState))tupleObject!;
  59. closureAction(t, closureState);
  60. },
  61. (continuationAction, state));
  62. }
  63. public static Task ContinueWithState<TResult, TState>(this Task<TResult> task, Action<Task<TResult>, TState> continuationAction, TState state, CancellationToken cancellationToken)
  64. {
  65. return task.ContinueWith(
  66. (t, tupleObject) =>
  67. {
  68. var (closureAction, closureState) = ((Action<Task<TResult>, TState>, TState))tupleObject!;
  69. closureAction(t, closureState);
  70. },
  71. (continuationAction, state),
  72. cancellationToken);
  73. }
  74. public static Task ContinueWithState<TResult, TState>(this Task<TResult> task, Action<Task<TResult>, TState> continuationAction, TState state, TaskContinuationOptions continuationOptions)
  75. {
  76. return task.ContinueWith(
  77. (t, tupleObject) =>
  78. {
  79. var (closureAction, closureState) = ((Action<Task<TResult>, TState>, TState))tupleObject!;
  80. closureAction(t, closureState);
  81. },
  82. (continuationAction, state),
  83. continuationOptions);
  84. }
  85. public static Task ContinueWithState<TResult, TState>(this Task<TResult> task, Action<Task<TResult>, TState> continuationAction, TState state, CancellationToken cancellationToken, TaskContinuationOptions continuationOptions)
  86. {
  87. return task.ContinueWith(
  88. (t, tupleObject) =>
  89. {
  90. var (closureAction, closureState) = ((Action<Task<TResult>, TState>, TState))tupleObject!;
  91. closureAction(t, closureState);
  92. },
  93. (continuationAction, state),
  94. cancellationToken,
  95. continuationOptions,
  96. TaskScheduler.Default);
  97. }
  98. }
  99. }