我想要一个类似于 EventWaitHandle 的任务,我在一端等待它,然后将其设置为在另一端完成。 TaskCompletionSource 几乎是我想要的,但它需要我传递一个值。我可以只使用一个虚拟值,但在这样做之前我想看看是否有更正确的解决方案。
重点是能够使用Task.WaitAny。
我在源代码中看到的最常见的场景就是简单地创建一个空的
struct
,它相当于什么都没有。或者使用 bool
作为虚拟对象:
internal struct Void { }
然后:
var tcs = new TaskCompletionSource<Void>();
我也在 BCL 源代码中看到了这种常见模式:
// Special internal struct that we use to signify that we are not interested in
// a Task<VoidTaskResult>'s result.
internal struct VoidTaskResult { }
您可以将第三方解决方案与 TaskCompletionSource 结合使用。
我们使用这个:Bolts-Swift