gpt4 book ai didi

c# - 如何允许所有后续线程继续通过 "gate"

转载 作者:太空宇宙 更新时间:2023-11-03 20:53:04 24 4
gpt4 key购买 nike

我需要能够让多个线程等待一个信号量,但是当我释放它们时,没有其他线程应该再次等待该信号量 - 它应该只允许任何后续线程。我找不到这方面的任何例子。

这是一个例子。我需要在设置“Result”属性后允许对其进行所有读取(而不是只允许一次读取)。

private class TaskResultWrapper<T>
{
private T result;

private SemaphoreSlim valueSetSemaphore = new SemaphoreSlim(0, 1);
private CancellationToken cancellationToken;

public TaskResultWrapper(CancellationToken cancellationToken)
{
this.cancellationToken = cancellationToken;
}

public T Result
{
get {
valueSetSemaphore.Wait(cancellationToken);
return result;
}

set
{
result = value;
valueSetSemaphore.Release();
}
}
}

最佳答案

我建议你使用 ManualResetEvent .它就是为此而设计的。在手动重置事件实例上调用 WaitOne() 的所有线程都将被阻塞,直到手动重置事件通过调用 Set() 发出信号。然后,释放所有阻塞的线程。

关于c# - 如何允许所有后续线程继续通过 "gate",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53277111/

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