【发布时间】:2018-06-13 01:25:54
【问题描述】:
我有一个查询本地数据库并将其发布到 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 秒。我看到了一些关于Task.Delay() 的信息,但没有看到任何线程。有没有什么我错过的东西可以帮助添加动态值延迟或设置最大并发线程数?
【问题讨论】:
-
如果我理解正确,您想减少 Web api 控制器的负载。目前的方法在这里似乎不合适。可能你应该尝试类似github.com/stefanprodan/WebApiThrottle 见stackoverflow.com/a/37774253/1606952
-
我想减少的负载是在 Linux Apache 服务器上,不过还是感谢您推荐的好包。
标签: c# .net multithreading