【发布时间】:2014-11-17 17:40:47
【问题描述】:
我需要使用其 API 提供的异步方法从控制台应用程序中调用第 3 方 Web 服务。我正在使用旧的 ASMX Web 参考方式来生成代理。
我有一个执行以下操作的类,我想创建它的一个实例,用它调用服务,但是我想等待回调完成,然后才用新的重复实例、新调用、新回调等
我不想一次激活超过 1 个通话。 即一次只存在一个类的实例。
Web 服务调用代码如下所示:
using(ABCWebService service = new ABCWebService())
{
...
service.ExecuteCallAndWaitResultCompleted += service_ExecuteCallAndWaitResultCompleted;
service.ExecuteCallAndWaitResultAsync(parm1, parm2, .., stateObj);
}
...
回调如下所示:
void service_ExecuteCallAndWaitResultCompleted(object sender, ExecuteCallAndWaitResultCompletedEventArgs e)
{
// collect data and then move onto next sequential call
}
【问题讨论】:
-
AsyncMethod 的返回类型是什么?您也许可以使用 TaskFactory.FromAsync 方法之一来使用 async/await 模式。
-
如果你想阻止,为什么还要异步调用它?
-
@StephenKennedy 他不想阻止,他只是不想并发呼叫。
-
@CoryNelson 我认为他想阻止。它是一个控制台应用程序,它调用 Web 服务,等待响应,一旦响应到达就执行某些操作,然后无限期地重新开始。因此,去老学校并调用非异步客户端代码。如果我误读了情况,请提前道歉。
-
似乎是不必要的异步 IO 情况。您似乎假设服务器提供异步 API,而实际上服务器和客户端是独立的。您可以将同步和异步与 any 服务器一起使用。见stackoverflow.com/a/22591516/122718
标签: c# .net web-services asynchronous