使控制器方法异步还是保持同步?

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)

有什么想法吗?

usr*_*usr 3

这里,使用异步IO的原因是不要有很多线程同时运行。线程消耗操作系统资源和内存。线程池在适应突然的负载时也会有点慢。如果 Web 应用程序中的线程数低于 100 并且负载不是非常高,那么您无需担心。

一般来说,Web 服务越慢且调用越频繁,异步 IO 就越有利。您将需要平均(延迟*频率)线程运行。因此,100 毫秒的调用时间和每秒 10 次调用平均约为 1 个线程。

运行数字并查看是否需要更改任何内容。