我有以下异步代码:
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;
}
}目标是我可以在IndexSynchronous进行处理时简单地打开AsyncTest,但是这种方式不能工作。我首先调用Asynctest,然后调用IndexSynchronous来验证这一点,后者仍在等待其他操作。
有人能告诉我我错过了什么吗?
发布于 2020-07-08 07:48:13
异步等待不是并行编程。它的目的是在等待IO操作时避免无用的CPU处理。
当你这样做时:
string fileContent = await GetFileContent();您只是告诉当前线程停止它的执行,直到它收到一个interupt (IO操作完成)。现在任务出现了:当正在执行任务的线程等待IO操作继续时,它可以在等待时开始执行另一个任务。
进程的并行度由正在使用的线程池的线程数表示。每个线程都执行任务。当线程调用等待时,停止当前任务的执行并开始执行另一个任务。
异步等待通过避免线程在等待IO操作时使用CPU来提高性能。
为了回答您的问题,即使在没有异步控制器的旧ASP.NET web应用程序中,您也可以同时处理不同的请求(以及不同的控制器操作)。你不需要做任何事情来达到这个目的。
https://stackoverflow.com/questions/62789564
复制相似问题