ewo*_*ack 6 c# asp.net-mvc asynchronous
我正在使用一个预先存在的 C# ASP.NET MVC web 应用程序,我正在向它添加一些我无法决定是否进行异步的功能。
现在,应用程序主页只处理一个页面,然后用户登录。仅此而已,也没有任何异步操作。
我添加的功能将在访问主页时生成对 Web API 的调用,该调用随后调用数据库,该数据库获取标识符并将其返回到主页上的 HTML 标记。该标识符在屏幕上不可见,仅在源/HTML 视图中可见(这是为了各种内部跟踪目的而添加的)。
Web API/数据库调用很简单,只需获取一个标识符并将其返回给控制器。无论如何,我想知道应用程序是否应该异步进行此调用?网站流量并不大,但我仍然想知道并发性、性能和未来的可扩展性。
一个问题是我必须使整个 ActionMethod 异步,我不确定这会产生什么影响。当前同步的基本模式如下:
public ActionResult Index()
{
var result = GetID();
ViewBag.result = result.Data;
return View();
}
public JsonResult GetID()
{
var result = "";
var url = "http://APIURL/GetID";
using (WebClient client = new WebClient())
{
result = client.DownloadString(url);
}
return Json(result, JsonRequestBehavior.AllowGet);
}
Run Code Online (Sandbox Code Playgroud)
有什么想法吗?
这里,使用异步IO的原因是不要有很多线程同时运行。线程消耗操作系统资源和内存。线程池在适应突然的负载时也会有点慢。如果 Web 应用程序中的线程数低于 100 并且负载不是非常高,那么您无需担心。
一般来说,Web 服务越慢且调用越频繁,异步 IO 就越有利。您将需要平均(延迟*频率)线程运行。因此,100 毫秒的调用时间和每秒 10 次调用平均约为 1 个线程。
运行数字并查看是否需要更改任何内容。