gpt4 book ai didi

c# - 来自具有特定延迟的线程的方法调用

转载 作者:太空宇宙 更新时间:2023-11-03 13:46:50 25 4
gpt4 key购买 nike

我需要同步一个方法调用,以便线程可以在 500 毫秒 sleep 后调用此方法。我有 10 个可能同时运行的线程,因此简单地引入 Thread.Sleep(500) 没有帮助。我怎样才能以最简单的方式实现这一目标?你有什么建议?

_pool = new Semaphore(0, 10);
_pool.Release(10);
...
pool.WaitOne();

Thread thr = new Thread(WorkerThread);
t.Start(param);
...
public static void WorkerThread(object parameterData)
{
...
MethodToBeSynced();
...
_pool.Release();
}

最佳答案

如果您知道并发线程的数量(假设它们大约同时启动),您可以使用带有 PostPhaseAction 委托(delegate)的 Barrier

 var barrier = new Barrier(10, (x) => Thread.Sleep(500));

屏障一直等到 10 个线程处于某个代码点,一旦发生这种情况,每个线程将休眠 500 毫秒,然后继续。

如果线程的确切数量未知,您可以指定一个等待超时来避免无限阻塞。

// Waits up until N threads are at the barrier or after the timeout has elapsed.
_barrier.SignalAndWait(500);

关于c# - 来自具有特定延迟的线程的方法调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15066810/

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