我有一个遗留的 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 模式。注意操作的单向性。我的问题:
- 我想我需要
AsyncPattern = true
从OperationContract
属性中删除 。 - 将
IAsyncResult
返回类型替换void
为接口和async void
类中的。 - 为了方便起见,删除 Begin/End 并添加 Async 后缀。
现在我应该如何从客户端调用单向操作? 没有在客户端使用 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();