Csharp/C#教程:单向异步/等待WCF中的调用分享


单向异步/等待WCF中的调用

我有一个传统的WCF服务,其中包含以最经典的方式实现的许多单向操作合同:

// The interface [OperationContract(IsOneWay = true, AsyncPattern = true)] IAsyncResult BeginFinalizePublishing(PageContent pageContent, AsyncCallback callback, object asyncState); void EndFinalizePublishing(IAsyncResult result); // The service public IAsyncResult BeginFinalizePublishing(PageContent pageContent, AsyncCallback callback, object asyncState) {...} 

所以一切正常,现在我需要将其转换为c#5最新的async / await模式。 注意操作的单向性。 我的问题:

现在我该如何从客户端调用单向操作? 对于单向呼叫,在客户端右侧没有使用async / await?

这是正确的,将导致客户端的真正异步处理。

  // The proxy public void FinalizePublishingAsync(PageContent pageContent) { Channel.FinalizePublishingAsync(pageContent); } // The consumer of the client // No way to use await for void methods. IComPublisherFinalizerClient cl = new IComPublisherFinalizerClient(); cl.FinalizePublishingAsync(content); cl.Close(); 

首先,客户端完全独立于服务器。 客户端或服务器可以是同步的,使用IAsyncResult (APM)异步代码,或使用async (TAP)异步代码。

其次,服务器端的async方法应该返回Task ,即使是单向通信也是如此。 返回void的同步方法的async等效项是async Task方法,而不是async void方法。 async void在WCF服务中特别危险,因为它可能违反ConcurrencyMode

所以你的服务器端步骤如下所示:

您的客户端应该在接口上看到其代理的Task -returning方法,它应该await 。 这并不意味着你在等待回应; 此await使您可以等待发送实际消息(如果有延迟)并检测通道通信错误(如果您使用的是可靠通道)。

上述就是C#学习教程:单向异步/等待WCF中的调用分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/991710.html

(0)
上一篇 2021年12月24日
下一篇 2021年12月24日

精彩推荐