我想从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 内部使用的方法。
3 回答
Smart猫小萌
TA贡献1911条经验 获得超7个赞
让我这样说,如果API在服务器上启动了异步操作(称为SomeMethodStart
),它将如何通知客户端其完成情况?将会有一个客户端代理BeginSomeMethodStart
及其EndSomeMethodStart
方法,但是调用EndSomeMethodStart
客户端将SomeMethodStart
在服务器返回后立即返回,而不是在服务器端异步操作结束时返回。他需要的是正确地向客户端公开服务器端异步操作,并能够async/await
在服务器上使用而不阻塞。该服务需要公开APM或TAP API。
米脂
TA贡献1836条经验 获得超3个赞
当(异步)服务器完成处理时,它将发送响应。BeginXXX方法完成后,没有响应发送。没有一个字节。在服务器上完成EndXXX方法之后,才发出响应。calling EndSomeMethodStart on the client will return as soon as SomeMethodStart returns on the server
否-响应到达后返回。服务器完成所有处理后,响应到达。试试吧。与提琴手观察。
- 3 回答
- 0 关注
- 517 浏览
添加回答
举报
0/150
提交
取消