繁体   English   中英

使我的 MVC Async controller 方法异步,以便它们可以同时处理

[英]Making my MVC Async controller methods asynchronous so they can process at the same time

我有以下异步代码:

public class AsynchronousController : AsyncController
{
    public ActionResult IndexSynchronous(string city)
    {
        return View("Index");
    }

    public async Task<ActionResult> AsyncTest(string call1, string call2)
    {
        await Task.Delay(10000);
        return null;
    }
}

目标是我可以在 AsyncTest 正在处理时简单地打开 IndexSynchronous,但这样它不起作用。 我通过首先调用 Asynctest 然后调用 IndexSynchronous 来验证这一点,它仍在等待其他操作。

谁能告诉我我错过了什么?

Async - Await 与并行编程无关。 这是为了避免在等待 IO 操作时进行无用的 CPU 处理。

当你这样做时:

string fileContent = await GetFileContent();

您只是告诉当前线程停止执行,直到它收到中断(IO 操作完成)。 现在任务进来了:当正在执行任务的线程等待IO 操作继续时,它可以在等待时开始执行另一个任务。

进程的并行度由正在使用的线程池的线程数给出。 每个线程都比执行任务。 当一个线程调用 await 时,会停止当前任务的执行并开始执行另一个任务。

Async - Await是关于通过避免线程在等待 IO 操作时使用 CPU 来提高性能

要回答您的问题,即使在没有异步控制器的旧 ASP.NET web 应用程序中,您也可以同时处理不同的请求(以及不同的 controller 操作)。 你不需要做任何事情来达到这个目标。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM