我如何做taskcompletionsourcenothing>的等效物

本文关键字:何做 taskcompletionsourcenothing | 更新日期: 2023-09-27 18:01:37

我想有一个类似eventwaithandle的任务,我在一端等待它,然后在另一端将其设置为完成。TaskCompletionSource几乎是我想要的,但它需要我传递一个值。我可以使用一个虚拟值,但在我这么做之前,我想看看是否有一个更正确的解决方案。

关键是能够使用Task.WaitAny.

我如何做taskcompletionsourcenothing>的等效物

我在源代码中看到的最常见的场景是简单地创建一个空的struct,它相当于什么都没有。或者使用bool作为dummy:

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 { }