.NET 9 中的 TaskCompletionSource.SetFromTask

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

内容提要

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

Q&A

.NET 9 中的 TaskCompletionSource.SetFromTask 方法有什么新特性?

SetFromTask 方法允许从已完成的任务设置 TaskCompletionSource 的结果或状态,并引入了 TrySetFromTask 方法以避免重复设置引发异常。

如何使用 SetFromTask 方法设置 TaskCompletionSource 的状态?

可以通过调用 tcs.SetFromTask(completedTask) 来设置 TaskCompletionSource 的状态,其中 completedTask 是已完成的任务。

TaskCompletionSource 如何处理已取消的任务?

当任务被取消时,TaskCompletionSource 的状态会变为 Cancelled,反映任务的取消状态。

在处理异常任务时,如何避免抛出异常?

可以使用 .ConfigureAwait(ConfigureAwaitOptions.SuppressThrowing) 来等待任务结束而不抛出异常。

如果 TaskCompletionSource 已经设置了结果,如何避免再次设置时引发异常?

可以使用 TrySetFromTask 方法来尝试设置,如果已经设置则返回 false,而不会抛出异常。

TaskCompletionSource 在自定义任务中有什么用处?

TaskCompletionSource 对于需要自定义任务的场景非常有用,可以帮助包装和管理任务的状态。

🏷️

标签

➡️

继续阅读