Sti*_*son 8 c# asynchronous servicestack asp.net-web-api
我想知道如果不是代码的所有部分都是异步的,那么使用异步http请求会带来多少好处.
让我们考虑一下场景:1)异步http请求阻塞同步数据库调用,以及2)同步等待异步数据库调用的http请求.
1)Web Api支持异步操作方法,但是如果我在处理请求时执行同步数据库调用,那么线程会阻塞调用,而且我不会从async可以给我或更好的线程经济中获益吗?
2)如果我有等待异步数据库调用的同步ServiceStack服务调用,那么会发生什么?我假设一个线程被保留用于处理整个同步http请求,当这个线程等待异步调用时,它仍然保留给Web请求或者什么?
基本上我的问题可归结为:如果不是所有IO调用都是异步的话,有没有理由使用异步?
在服务器端,部分async解决方案通常没有任何好处.
1)Web Api支持异步操作方法,但是如果我在处理请求时执行同步数据库调用,那么线程会阻塞调用,而且我不会从async可以给我或更好的线程经济中获益吗?
正确.只要执行同步(阻塞)数据库调用,就会在该调用期间占用一个线程.因此,您所获得的好处async不适用.
2)如果我有等待异步数据库调用的同步ServiceStack服务调用,那么会发生什么?我假设一个线程被保留用于处理整个同步http请求,当这个线程等待异步调用时,它仍然保留给Web请求或者什么?
这与同步数据库调用相同.在封面下,同步数据库调用异步执行实际调用,然后阻塞调用线程直到它完成.因此,在通话期间,您仍然会阻止线程,并且您无法获得任何async好处.
基本上我的问题可归结为:如果不是所有IO调用都是异步的话,有没有理由使用异步?
还有一些更加模糊的场景.您可以使用Task.WhenAll有限类型的并发,这async比其他形式的异步并发更容易.但如果你没有完全async堆叠,这是我能想到的唯一好处.
| 归档时间: |
|
| 查看次数: |
1795 次 |
| 最近记录: |