C# ADO.Net中的异步编程

C# ADO.Net中的异步编程,c#,asp.net,.net,wcf,asynchronous,C#,Asp.net,.net,Wcf,Asynchronous,下面的链接解释了4.5.NETFramework的新异步编程特性,这在很大程度上是相当直接的阅读 不过,我只是想确定一下 如果我在web服务中使用SQLDataReader,并且通过在代理中生成异步方法(通过“服务引用”对话框选项)在客户端上创建服务引用以使用该web服务,我很好地想象我将不需要使用上面链接中提到的方法 相反,在调用web服务方法时,我会在客户机上适当地使用异步、任务和等待关键字 由于在“Web服务”对话框中选中了这些选项,它将自动为ADO.Net调用创建异步方法调用 因此,如果

下面的链接解释了4.5.NETFramework的新异步编程特性,这在很大程度上是相当直接的阅读

不过,我只是想确定一下

如果我在web服务中使用SQLDataReader,并且通过在代理中生成异步方法(通过“服务引用”对话框选项)在客户端上创建服务引用以使用该web服务,我很好地想象我将不需要使用上面链接中提到的方法

相反,在调用web服务方法时,我会在客户机上适当地使用异步、任务和等待关键字

由于在“Web服务”对话框中选中了这些选项,它将自动为ADO.Net调用创建异步方法调用

因此,如果您在web服务中有一个名为GetCategories的方法,它将在web服务中自动创建一个名为GetCategoriesAsync的异步调用,该调用可以从客户端调用。同样,无需在web服务方法调用上放置异步属性;仅适用于使用web服务的ADO.Net调用,或使用web服务的ADO.Net调用,但未选中异步选项


我的想法正确吗?

这取决于您想要使异步化的内容

网络通信本质上是异步的。当VisualStudio为web服务创建客户端代理时,它同时创建异步和同步方法(其中同步方法只是阻塞等待响应)。因此,您的web客户端可以是异步的,无论服务器是如何实现的,都是如此。换句话说,服务器可以是同步的或异步的,客户机可以是同步的或异步的,彼此完全独立

在客户端,您几乎应该始终在代理上使用异步方法。客户的主要好处是响应能力

在服务器端,您可以通过使用异步实现获得可伸缩性优势。但是,如果您的后端是一个SQL server数据库,并且每个请求都会访问该数据库,那么使web服务异步通常没有什么好处。这是因为(在这种情况下)可伸缩性瓶颈是SQL server,而不是web服务器。OTOH,如果您的后端是SQL server群集或Azure SQL,那么您可以通过使用异步web服务实现获得可伸缩性优势


旧式的常见场景是
客户机API DB
,在该体系结构中有一个。然而,越来越多的体系结构看起来像
客户端API云存储/API
,而
异步
确实给API层带来了好处。

Stephen,谢谢你的评论,但我想知道你是否可以更直接地回答这个特定场景。据我所知,如果我在web服务中的方法的客户端调用中使用async、Task和Wait关键字,那么我就不需要在web服务端编写任何异步功能。如果使用异步web服务实现,我还需要从客户端异步调用该web服务实现吗?Stephen,仅供参考,在我的特殊情况下,我需要并行进行多个DB调用。因此,我是否仍然需要使用SQLDataReader和异步方法创建web服务端,或者我是否可以使用相应的异步方法从生成的代理代码从客户端异步调用它自动创建了相应的异步方法。基于此,我不需要在web服务中手动创建另一个异步方法。我可以简单地在async、Task和Wait关键字中“总结”一下。读完文章后,我似乎能够坚持我原来的计划。由于服务将自动创建相应的异步方法,因此我只需使用适当的异步任务调用客户端上的异步服务方法,然后相应地等待关键字。@sagesky36:我回答的要点是,您有两个独立的位置可以选择使用
async
:客户端和服务器。如果要使客户端响应,请在客户端上使用
async
。如果要使服务器可扩展,请在服务器上使用
async
。这是两个完全不同的决定。