从WCF服务调用异步方法

我想从WCF服务中调用异步方法,例如:


[ServiceContract]

interface IService

{

    [OperationContract]

    int SomeMethod(int data);

}


int SomeMethod(int data)

{

    var query = ... build LINQ query;

    var response = await query.ToListAsync();

    return response.Length;

}

我不想添加async到IService接口或SomeMethod方法。使用异步方法是一个内部问题,不应在界面中反映出来。


我怎样才能做到这一点?


澄清:


我的问题是await在非async方法中使用。我不希望更改服务合同(客户端不一定知道是什么async),也不想将方法拆分为BeginSomeMethod和EndSomeMethod。我想要一种await 内部使用的方法。


慕娘9325324
浏览 486回答 3
3回答

Smart猫小萌

让我这样说,如果API在服务器上启动了异步操作(称为SomeMethodStart),它将如何通知客户端其完成情况?将会有一个客户端代理BeginSomeMethodStart及其EndSomeMethodStart方法,但是调用EndSomeMethodStart客户端将SomeMethodStart在服务器返回后立即返回,而不是在服务器端异步操作结束时返回。他需要的是正确地向客户端公开服务器端异步操作,并能够async/await在服务器上使用而不阻塞。该服务需要公开APM或TAP API。

米脂

当(异步)服务器完成处理时,它将发送响应。BeginXXX方法完成后,没有响应发送。没有一个字节。在服务器上完成EndXXX方法之后,才发出响应。calling EndSomeMethodStart on the client will return as soon as SomeMethodStart returns on the server否-响应到达后返回。服务器完成所有处理后,响应到达。试试吧。与提琴手观察。
打开App,查看更多内容
随时随地看视频慕课网APP