我希望有一个EventWaitHandle - 类似的任务,我在一端等待它,然后在另一端将它设置为完成。 TaskCompletionSource几乎是我想要的,但它要求我传递一个值。我可以使用虚拟值,但在我这样做之前,我想我是否能找到更正确的解决方案。
重点是能够使用Task.WaitAny。
答案 0 :(得分:4)
我在源代码中看到的最常见的情况是创建一个空的struct
,它等同于什么。或者使用bool
作为虚拟:
internal struct Void { }
然后:
var tcs = new TaskCompletionSource<Void>();
我在BCL source code中也看到过这种常见模式:
// Special internal struct that we use to signify that we are not interested in
// a Task<VoidTaskResult>'s result.
internal struct VoidTaskResult { }