[英]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.