gpt4 book ai didi

c# - ThreadPool with 2 WaitCallback 有时会卡住

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

我正在尝试使用 ThreadPool.QueueUserWorkItem 但似乎如果我要运行其中的 2 个,意思是:

ThreadPool.QueueUserWorkItem(new WaitCallback(x=>function A); 
ThreadPool.QueueUserWorkItem(new WaitCallback(x=>function B);

有时会卡住不到一秒。有什么想法吗?

其中一个调用是游戏倒计时:

ThreadPool.QueueUserWorkItem(new WaitCallback(x=>initClock(0,0)));

private void initClock(int sec , int hunS)
{
int half = gameClock / 2;
seconds = sec;
while (true)
{
while (clockLock == false && seconds < gameClock)
{
hunSec = hunS;
while (clockLock == false && hunSec < 100)
{
Thread.Sleep(10);
updateClock(seconds, hunSec);
hunSec++;
}
seconds++;
if (half == seconds)
{
panel5.BackColor = Color.Red;
}
}
}
}

private void updateClock(int sec, int secRem)
{
if (this.InvokeRequired)
{
this.Invoke(new Action<int, int>(updateClock), sec, secRem);
}
else
{
clock_Label.Text = sec.ToString() + ':' + secRem.ToString();
}
}

最佳答案

您是否开始了许多这样的任务,每一个任务都会阻塞很长时间?根据给出的信息,情况可能是这样。

这意味着很多线程可以同时处于事件状态。当您使用高于最低限制的线程池时,启动一个额外的线程将被限制(我相信)500 毫秒。这可能是您看到的延迟。

如何解决这个问题?

  1. 启动较少的线程。使用异步 IO 和异步等待。那些不使用任何线程。使用 await 可以很容易地做到这一点。
  2. 增加线程池的最小限制。 SetMinThreads.

关于c# - ThreadPool with 2 WaitCallback 有时会卡住,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25109053/

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