猿问

根据服务器负载为异步线程启动添加延迟

我有一个查询本地数据库并将其发布到 web api 的任务。目前,它需要所有行,将它们分成 500 个块,然后使用异步线程设置同时发布它们。我有另一份工作,偶尔会从服务器获取数据,我在想,如果我返回服务器负载并将其存储在Config.ServerLoad. 这是我用来设置线程的代码:


var json = JsonConvert.SerializeObject(rowDto);

var threads = new Thread(new ParameterizedThreadStart(MultiThreadPostThead));

var thisThread = new PostParams() { postUrl = postUrl, json = json, callingThread = threads };

threads.Start(thisThread);

threads.IsBackground = true;

ThreadHandles.Add(thisThread);

我希望添加这样的东西:


thread.delay(Config.ServerLoad * 1000);

例如,如果服务器负载为 0.5,线程之间几乎没有延迟,但如果它是 10,它将在帖子之间等待 10 秒。我看到了一些关于 a 的信息Task.Delay(),但没有看到任何关于线程的信息。我错过了什么有助于增加动态值延迟或设置最大并发线程数的东西?


素胚勾勒不出你
浏览 149回答 2
2回答

跃然一笑

如果您想延迟新线程的启动,那么您可以执行以下操作PerformanceCounter cpuCounter;cpuCounter = new PerformanceCounter("Processor", "% Processor Time", "_Total");var thisThread = new PostParams() { postUrl = postUrl, json = json, callingThread = threads };Thread.Sleep((int)(cpuCounter.NextValue() * 1000));threads.Start(thisThread);你可以做的另一件事是使用threads.Sleep((int)(cpuCounter.NextValue() * 1000));因为它是一个线程,所以应该有可用的方法这应该获取当前的 Cpu 使用情况,然后在启动新线程之前让当前线程休眠一段时间 - 如果您已经在配置中存储了一个数字,那么您可以放弃执行上下文内容并将其替换为您拥有的值: )
随时随地看视频慕课网APP
我要回答