为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
素胚勾勒不出你 2021-08-07 18:00:25
我有一个查询本地数据库并将其发布到 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(),但没有看到任何关于线程的信息。我错过了什么有助于增加动态值延迟或设置最大并发线程数的东西?
查看完整描述

2 回答

?
跃然一笑

TA贡献1826条经验 获得超6个赞

如果您想延迟新线程的启动,那么您可以执行以下操作


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 使用情况,然后在启动新线程之前让当前线程休眠一段时间 - 如果您已经在配置中存储了一个数字,那么您可以放弃执行上下文内容并将其替换为您拥有的值: )


查看完整回答
反对 回复 2021-08-07
  • 2 回答
  • 0 关注
  • 148 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信