c# - ASP.NET 多线程 Web 请求

标签 c# asp.net multithreading webrequest

我正在我的 ASP.NET 解决方案中构建一个页面,该页面从第 3 方 API 服务检索其大部分数据。

页面本身将需要对 API 进行大约 5 次不同的调用以填充其所有控件,因为对 API 的每个 Web 请求都会返回不同的数据集。

我想同时处理我在新线程上发出的每个单独的 Web 请求,以便减少加载时间。

我发出的每个请求看起来像这样:-

WebRequest request = WebRequest.Create(requestUrl);

string response = new StreamReader(request.GetResponse().GetResponseStream()).ReadToEnd();

return new JsonSerializer().Deserialize<OccupationSearch>(new JsonTextReader(new StringReader(response)));

首先,我应该尝试这个吗?即,它安全吗?并且它会通过多线程处理来提高性能吗?

其次,执行此操作的最佳方法是什么?多线程系统有许多不同的方法,但哪种方法最适合这项任务?

最佳答案

多线程是正确的选择,但我会称之为异步处理

无论如何,您应该知道多线程在 IIS 中的工作方式不同。

IIS 工作进程会在所有子线程结束后完成一个请求,这是一个大问题,因为您不希望长时间占用一个工作进程,而是将其重新用于其他请求。其实就是一个线程池。

这就是 ASP.NET 提供自己的方法来实现异步的原因,如果您使用正确的方法,IIS 将能够一次处理更多请求,因为异步工作将在 IIS 进程模型之外执行。

我建议您阅读有关 ASP.NET 异步的更多信息:

结论:使用异步工作,这将更有效地利用服务器资源,但首先要了解更多关于如何以正确的方式做到这一点!

关于c# - ASP.NET 多线程 Web 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23912456/

相关文章:

c# - 使用 Visual Studio 创建登录表单

.net - Asp.Net MVC - 插件目录、社区等?

asp.net - JqG​​rid 在 ASP.NET MVC2 中不起作用

c++ - 如果我在锁定互斥锁之前解锁它可以吗?

java - 多线程代码有什么问题?

c# - 在 Microsoft Sync Framework 中获取更改摘要

c# - 串口软件占用和硬件占用的区别

c# - 删除网格中 ImageButton 元素之间的空间

c# - 如何在 MVC4 中生成自定义删除操作结果?

c# - C# 中的 Mutex - 从未同步的代码块同步