gpt4 book ai didi

c# - 任务完成源 : When to use SetResult() versus TrySetResult(), 等

转载 作者:IT王子 更新时间:2023-10-29 03:51:55 26 4
gpt4 key购买 nike

我正在努力思考 TPL、C# 5 中新的 async/await 特性,以及 TaskCompletionSource.

我不清楚的一件事是何时使用 SetResultSetExceptionSetCancelTrySetResultTrySetExceptionTrySetCancel

MSDN 是这样说的:

This operation will return false if the Task is already in one of the three final states: RanToCompletion, Faulted, or Canceled.

This method also returns false if the underlying Task has already been disposed.

好的,我明白了,但它并没有真正提供任何关于何时或为何使用其中一个的指导。

那么,这是怎么回事?

最佳答案

怀疑关键是,如果只有一件事会设置结果,只需调用 SetResult 等。如果您最终调用 SetResult 两次,表示存在错误。 (同样,如果 TaskCompletionSource 已被释放。)

如果您有多个线程可能同时尝试设置结果(例如,它用于指示多个并行 Web 服务调用中的第一个结果),则使用 TrySetResult ,因为多个线程“尝试”设置结果是完全合理的,而不知道另一个线程是否已经设置了它。

我还没有看到任何关于它的官方指南,但这是有道理的。

关于c# - 任务完成源 : When to use SetResult() versus TrySetResult(), 等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12100022/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com