【发布时间】:2015-10-15 13:25:35
【问题描述】:
我必须从 WCF 服务调用三个不同的异步方法。我有以下包含所有三个调用的方法:
private async Task CreateMultipleTasksAsync()
{
CrimcaseServiceClient client = new CrimcaseServiceClient(
new BasicHttpBinding(),
new EndpointAddress("http://192.168.1.100/FooService/FooService.svc")
);
client.GetEventCompleted += OnGotEventResult;
client.GetEventAsync(eventInfo);
client.GetLocationsCompleted += OnGotLocationsResult;
client.GetLocationsAsync();
client.GetTypesCompleted += OnGotTypesResult;
client.GetTypesAsync();
}
三个调用都完成后,我需要填充一些值。但是,我似乎遇到了如何等待三个人先完成的问题。
我已经尝试这样做,使用这个调用,但它仍然没有等待所有调用完成,然后再继续下一段代码:
private void GrabData()
{
var task = Task.Run(async () => { await CreateMultipleTasksAsync(); });
task.Wait();
}
任何建议都将不胜感激,因为我现在不知道该怎么做。
谢谢大家。
【问题讨论】:
-
异步调用的方法签名是什么?另外,您说:但它现在仍在等待所有调用完成,然后再继续执行下一段代码,这不正是您想要的吗?
-
那是一个错字 - 很抱歉。我的意思是说在继续下一段代码之前“不”等待所有调用完成。在查看生成的调用时,它们都设置为无效。 (希望我能正确理解您的问题)
-
我假设异步方法的方法签名是
void返回? -
说清楚 - 这是c#,对吧?如果是这样,请添加标签。如果不是,请添加一个不同的标签。它看起来像 C#,但很可能是其他语言,可能有非常不同的异步和等待概念。
标签: c# asynchronous async-await