在我的Silverlight应用程序中。我必须使用WCF服务。现在问题是我想在for循环中同步使用异步wcf服务。
该服务有点
private void GetCurrentDateTimeServiceCall(int i)
{
ExportWcfClient proxy = new ExportWcfClient();
proxy.GetCurrentDateTimeCompleted += ProxyGetCurrentDateTimeCompleted;
proxy.GetCurrentDateTimeAsync(i);
}
现在我在代码中调用该服务。
for(int i=0;i<length;i++)
{
a[i] =something;
GetCurrentDateTimeServiceCall(i);
list = a[i]*.895+a[i]*a[i];
blah blah
}
问题是因为服务是异步的。同步消耗服务很困难。最初我把第二个服务调用放在第一个服务调用的已完成方法中。第三个是完成方法的第二个等。
但是在for循环中,长度是多种多样的。我们不知道这个数字。并且服务相同只是传递其中的不同整数。
顺便说一句,我使用Visual Studio 2010,.NET 4.所以我不能使用async / await技能。 感谢帮助。
修改
由于该服务是异步的,因此有时GetCurrentDateTimeServiceCall(i);
下面的代码可能会先运行。例如,list = a[i]*.895+a[i]*a[i];
在服务调用之前运行。这不是预期的。我无法访问服务端代码。此外,我无法触摸应用程序配置,因为它在我们的数据访问层框架中。所以也许我需要一个标志或事件或while循环来强制整个流同步运行。
答案 0 :(得分:0)
WCF客户端支持同步调用。它们也应该已经生成。应该有一个方法GetCurrentDateTime
。如果由于某种原因需要异步API生成基于Task
的客户端(TAP,而不是EAP)。然后,如果你想同步并且由于某种原因不能直接使用同步方法,你可以使用Task.Wait()
来阻止。
请注意,服务器独立于客户端,因为无论服务器内部执行什么操作,客户端都可以同步或异步。 总是可以调用WCF服务同步和异步。