.NET 9 中的 TaskCompletionSource.SetFromTask

💡 原文中文,约3600字,阅读约需9分钟。
📝

内容提要

.NET 9 Preview 1 引入了 TaskCompletionSource/TaskCompletionSource<T> 中的 SetFromTask 方法,允许设置已完成任务的结果/状态。提供了在 Task.Delay 完成后设置 TaskCompletionSource、从 Task.FromResult 设置 TaskCompletionSource、处理已取消的任务、处理带有异常的任务,以及使用 TrySetFromTask 避免在 TaskCompletionSource 已经设置后再次设置时出现异常的示例。TaskCompletionSource 对于自定义任务非常有用。

🎯

关键要点

  • .NET 9 Preview 1 引入了 TaskCompletionSource/TaskCompletionSource<T> 的 SetFromTask 和 TrySetFromTask 方法。
  • SetFromTask 方法允许从已完成的任务设置 TaskCompletionSource 的结果或状态。
  • 提供了多个示例,包括在 Task.Delay 完成后设置 TaskCompletionSource 和从 Task.FromResult 设置 TaskCompletionSource。
  • 处理已取消的任务时,TaskCompletionSource 的状态会变为 Cancelled。
  • 处理带有异常的任务时,可以使用 .ConfigureAwait(ConfigureAwaitOptions.SuppressThrowing) 来避免抛出异常。
  • 在 TaskCompletionSource 已经设置结果后,不能再次设置,否则会引发异常,可以使用 TrySetFromTask 避免此问题。
  • TaskCompletionSource 对于自定义任务非常有用。
➡️

继续阅读