【发布时间】:2020-07-03 00:36:28
【问题描述】:
是否可以使用 SemaphoreSlim(或者应该使用其他什么东西?)一个线程来触发另一个线程,有没有办法清除过早的触发器? 这是异步代码,所以我松散地使用“线程”。
SemaphoreSlim ready = new SemaphoreSlim(0, 1);
// Thread 1
...
ready.CurrentCount = 0; // Can't do this, but somehow clear any premature triggers
DoSomething(); // this will eventually cause other thread to release
await ready.WaitAsync(); // wait for trigger
DoNextThing();
...
// Thread 2
...
ready.Release(); // trigger waiting thread to proceed
...
【问题讨论】:
-
这感觉像是 XY 问题 - meta.stackexchange.com/questions/66377/what-is-the-xy-problem。请详细说明根本问题。
-
解释你想要实现的目标。例如:你的用例是什么。这将有助于回答您的问题。
-
投票结束...这个问题需要更清楚,已经有一个很好的答案,但我担心除了猜测你想要完成的事情之外,没有足够的信息来做任何事情实际问题是什么。您还应该阅读How to Ask
-
事件对象可用于释放其他等待线程。如果没有其他线程在等待该对象,则不会发生任何事情。
标签: c# asynchronous synchronization semaphore