1

我正在考虑在async await调用服务时使用关键字,但想知道是否await需要关键字?

如果找到,则修改示例;我想做的是设置一个async对可以继续工作的服务的调用,但不需要等待响应:

async Task CallService(InformationForService informationForService)
{
    var service = SetupService();

    // Does this need the await keyword?
    service.Doof(informationForService);

}
4

2 回答 2

1

如果您将函数声明为异步并且它返回 Task,那么您的代码中的某些内容需要返回该类型。我在您的代码中看不到任何执行此操作的内容,因为您没有使用 await 关键字,该关键字通常会在将调用发送到服务时从您的函数中产生,然后在对服务的调用响应时从下一行继续.

如果您不关心服务返回什么,请忽略它,但使用 await 关键字,因为这将允许您的代码在服务调用完成时继续进行其他工作。

async Task<int> CallService(InformationForService informationForService)
{
    var service = SetupService();

    // Does this need the await keyword?
    await service.Doof(informationForService);

}

此外,请注意,如果您使用 WCF 调用服务,则可以发出单向调用,该调用在消息的最后一个字节发送后完成。Juval Lowy 在本文中讨论了单向调用

于 2013-03-08T10:27:28.860 回答
1

方法不必是async可等待的。有许多方法可以返回Task并可供 使用await,即使它们不是async

我假设您的服务是 WCF 服务。在这种情况下,如果您(重新)使用 VS2012 生成代理,对于Doof您的服务上的每个方法,您将获得一个DoofAsync适用于await.

你的CallService方法不需要是async;您可以返回Task您从中获得的内容DoofAsync

Task CallService(InformationForService informationForService)
{
  var service = SetupService();
  return service.DoofAsync(informationForService);
}
于 2013-03-08T13:53:46.413 回答