.NET 9 中的 TaskCompletionSource.SetFromTask
内容提要
.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 对于需要自定义任务的场景非常有用,可以帮助包装和管理任务的状态。