使用Async Await调用服务

时间:2013-03-08 10:14:26

标签: c# async-await

我希望在调用服务时使用async await个关键字,但想知道是否需要await关键字?

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

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

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

}

2 个答案:

答案 0 :(得分: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 discusses one-way calls in this paper

答案 1 :(得分:1)

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

我假设您的服务是WCF服务。在这种情况下,如果您(重新)使用VS2012生成代理,请为您的服务you'll get a DoofAsync method that will work with await上的每个方法Doof生成。

您的CallService方法不一定是async;您只需返回Task获得的DoofAsync

Task CallService(InformationForService informationForService)
{
  var service = SetupService();
  return service.DoofAsync(informationForService);
}