Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在不更改服务契约的情况下获得异步/等待的服务器端好处_C#_Wcf_Async Await - Fatal编程技术网

C# 在不更改服务契约的情况下获得异步/等待的服务器端好处

C# 在不更改服务契约的情况下获得异步/等待的服务器端好处,c#,wcf,async-await,C#,Wcf,Async Await,花了一些时间在谷歌上搜索,但没有找到一个明确的答案,也不知道如何通过测试证明它(欢迎建议) 我们有一个WCF服务,它有一个等待特定事件在循环中发生的方法。在循环中,它使用Thread.Sleep来等待几个100毫秒,这在服务中是一个很大的问题(我们想重新设计它。在服务中睡眠不是一个好主意,对吧?) 我希望通过使方法异步并使用Task.Delay来提高吞吐量,而不改变服务契约。在使方法异步并重新生成contract类之后,合同签名似乎是完整的。我还可以看到生成的代码现在有一个状态机,它似乎表明它现

花了一些时间在谷歌上搜索,但没有找到一个明确的答案,也不知道如何通过测试证明它(欢迎建议)

我们有一个WCF服务,它有一个等待特定事件在循环中发生的方法。在循环中,它使用Thread.Sleep来等待几个100毫秒,这在服务中是一个很大的问题(我们想重新设计它。在服务中睡眠不是一个好主意,对吧?)

我希望通过使方法异步并使用Task.Delay来提高吞吐量,而不改变服务契约。在使方法异步并重新生成contract类之后,合同签名似乎是完整的。我还可以看到生成的代码现在有一个状态机,它似乎表明它现在是异步的

我的问题是,即使我以同步方式调用异步服务方法,我是否会从线程可用于其他工作中获益?框架会等待服务方法吗

我的问题是,即使我以同步方式调用异步服务方法,我是否会从线程可用于其他工作中获益

因此,异步方法的服务器端好处与客户端使用服务的方式无关

异步在服务器端和客户端是独立的。服务器上的异步支持更大的可伸缩性(这可能会增加吞吐量,也可能不会增加吞吐量)。客户端上的异步支持UI响应

网络通信在这里是一个“分隔器”,所以任何一方都可以异步或同步地处理它,而不依赖于其他应用程序

我的问题是,即使我以同步方式调用异步服务方法,我是否会从线程可用于其他工作中获益

因此,异步方法的服务器端好处与客户端使用服务的方式无关

异步在服务器端和客户端是独立的。服务器上的异步支持更大的可伸缩性(这可能会增加吞吐量,也可能不会增加吞吐量)。客户端上的异步支持UI响应


网络通信在这里是一个“分隔器”,因此任何一方都可以异步或同步地处理它,而不依赖于其他应用程序。

方法的调用方是服务的客户端。这不是内部通话。因此框架处理方法的调用。我想知道这是否可以通过wait来完成(这样,当我的代码在等待某个东西时,线程就可以自由地进行其他服务调用了)。任务不会在服务器和客户端之间发送。因此,服务器并不关心请求是否由具有任务的客户端处理。服务器对客户端的所有了解都是一个请求负载,以及它必须发回一个响应负载的事实。因此,异步方法的服务器端好处与客户端使用服务的方式无关?方法的调用方是服务的客户端。这不是内部通话。因此框架处理方法的调用。我想知道这是否可以通过wait来完成(这样,当我的代码在等待某个东西时,线程就可以自由地进行其他服务调用了)。任务不会在服务器和客户端之间发送。因此,服务器并不关心请求是否由具有任务的客户端处理。服务器对客户端的所有了解都是一个请求负载,以及它必须发回一个响应负载的事实。因此,异步方法的服务器端好处与客户端使用服务的方式无关?感谢您的澄清。这与我对其工作原理的有限看法是一致的。这是否意味着服务器将自动等待在服务中调用的任何异步方法?对于它自己调用的方法,代码必须具有
Await
语句。好的,谢谢你的解释。我刚刚意识到我错过了使具有OperationContract属性的方法返回任务。我想我现在错过了内部等待?最简单的方法是从最低级别的方法开始,例如,将
线程。睡眠
更改为
等待任务。延迟
。编译器将指导您从那里开始:将该方法更改为
async
,并在调用它的任何地方使用
wait
,等等。您最终将使用您的服务实现方法。是的,我实际上就是这样做的。我只是不确定wcf框架是否会等待它。谢谢你的澄清。谢谢你的澄清。这与我对其工作原理的有限看法是一致的。这是否意味着服务器将自动等待在服务中调用的任何异步方法?对于它自己调用的方法,代码必须具有
Await
语句。好的,谢谢你的解释。我刚刚意识到我错过了使具有OperationContract属性的方法返回任务。我想我现在错过了内部等待?最简单的方法是从最低级别的方法开始,例如,将
线程。睡眠
更改为
等待任务。延迟
。编译器将指导您从那里开始:将该方法更改为
async
,并在调用它的任何地方使用
wait
,等等。您最终将使用您的服务实现方法。是的,我实际上就是这样做的。我只是不确定wcf框架是否会等待它。谢谢你的澄清。