async
和await
关键字。在这里链接有以下段落:
对于粗体字的部分,“异步请求处理与同步请求处理所需的时间相同”是什么意思呢? 例如:处理异步请求
在启动时或并发请求数量猛增(并发度突然增加)的Web应用程序中,将这些Web服务调用设置为异步将提高您的应用程序的响应能力。异步请求处理与同步请求处理所需的时间相同。例如,如果一个请求进行了需要2秒钟才能完成的Web服务调用,则无论是同步还是异步执行该请求,它都需要2秒钟。但是,在异步调用期间,线程不会被阻塞,而是可以响应等待第一个请求完成时的其他请求。因此,在存在许多并发请求调用长时间运行操作时,异步请求可以防止请求排队和线程池增长。
public async Task MyMethod()
{
Task<int> longRunningTask = LongRunningOperation();
//indeed you can do independent to the int result work here
//and now we call await on the task
int result = await longRunningTask;
//use the result
Console.WriteLine(result);
}
public async Task<int> LongRunningOperation() // assume we return an int from this long running operation
{
await Task.Delay(1000); //1 seconds delay
return 1;
}
据我了解,LongRunningOperation()
从这里开始执行:Task<int> longRunningTask = LongRunningOperation();
,一旦调用 await
就会返回值,因此在我的观点中异步代码比同步代码更快,是这样吗?
另一个问题:
据我了解,主线程正在执行 MyMethod()
,不会被阻塞等待 LongRunningOperation()
完成,而是返回到线程池中为其他请求提供服务。那么还有另一个线程被分配给 LongRunningOperation();
来执行它吗?
如果是这样,那么异步编程和多线程编程之间有什么区别?
更新:
假设代码变成了这样:
public async Task MyMethod()
{
Task<int> longRunningTask = LongRunningOperation();
//indeed you can do independent to the int result work here
DoIndependentWork();
//and now we call await on the task
int result = await longRunningTask;
//use the result
Console.WriteLine(result);
}
public async Task<int> LongRunningOperation() // assume we return an int from this long running operation
{
DoSomeWorkNeedsExecution();
await Task.Delay(1000); //1 seconds delay
return 1;
}
在这种情况下,在执行
DoIndependentWork()
期间,LongRunningOperation()
会由另一个线程执行吗?