- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个使用 .NET 4.5 的 MVC3 项目(由于各种原因我们无法升级到 MVC4)。我需要运行三个数据库查询,每个查询都需要几秒钟,以在 AJAX 请求中填充三组数据。
我最初的想法是只进行 3 个单独的 AJAX 调用,但我遇到了最大并发 AJAX 请求的问题 - 我们同时进行了很多其他 AJAX 调用,所以这 3 个在客户端被阻止,而等待所有调用清除。
所以我试图将它放在一个 AJAX 调用中,但我仍然想同时执行三个查询。
因为它是 MVC3,我显然不能做简单的 async Task<JsonResult>
与 await Task.WhenAll(tasks)
在三个任务上。
除了简单的“一劳永逸”的东西,我没有做过很多多线程,所以我想确保我做的是正确的。
下面的简单方法可以正常工作,但我很确定这不是正确的方法 - 我读过很多人谈论 ASP.NET 如何对线程处理挑剔,尤其是当你开始使用很多线程数。
var threads = new List<Thread>();
threads.Add(new Thread(() => x1 = Method1()));
threads.Add(new Thread(() => x2 = Method2()));
threads.Add(new Thread(() => x3 = Method3()));
threads.ForEach(t => t.Start());
threads.ForEach(t => t.Join());
// x1, x2, and x3 are now populated
我需要更改什么才能正确使用 ThreadPool 或我应该考虑的任何其他线程技术,并确保我正确关闭这些东西?该站点通常只有几十个并发用户,每当他们加载页面时都会进行此调用 - 因此线程数不是很多。
我还将添加异常处理以确保不会出现任何问题。
最佳答案
What do I need to change in order to properly use the ThreadPool or whatever other threading techniques I should be considering, and make sure I close things properly?
视情况而定。
您当前的代码 won't reuse a thread from the thread pool and possibly thread-starve the PoolThread causing a 500 (ASP.Net request processing stalled because the CLR thread pool is out of threads) .启动一个新线程会有一点性能损失(这也是线程池最初存在的原因),但是对于高吞吐量的高并发网站来说,这是一个不错的选择。
也就是说,如果您的网站服务于低吞吐量、低并发用户群,我认为它就完蛋了。使用 Task.Factory
在眼睛(意见)上要容易得多.这将使用线程池中的线程,但除非您在单核机器上运行网站,否则我怀疑没有人会注意到。
在线程模型之外,还有更多架构方法来减少数据库命中,但您的问题非常具体,如果不了解更多信息,我无法提出太多建议。
关于c# - 通过 MVC3 AJAX 调用使用线程或任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24313852/
我是一名优秀的程序员,十分优秀!