在for循环

时间:2016-09-03 13:29:12

标签: c# .net wcf asynchronous

在我的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循环来强制整个流同步运行。

1 个答案:

答案 0 :(得分:0)

WCF客户端支持同步调用。它们也应该已经生成。应该有一个方法GetCurrentDateTime。如果由于某种原因需要异步API生成基于Task的客户端(TAP,而不是EAP)。然后,如果你想同步并且由于某种原因不能直接使用同步方法,你可以使用Task.Wait()来阻止。

请注意,服务器独立于客户端,因为无论服务器内部执行什么操作,客户端都可以同步或异步。 总是可以调用WCF服务同步和异步。