【问题标题】:Calling a Service with Async Await使用 Async Await 调用服务
【发布时间】:2013-03-08 21:53:46
【问题描述】:

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

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

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

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

}

【问题讨论】:

  • 返回什么Task<int>
  • 你的代码是如何编译的?
  • 对不起,我从一个例子中复制了这个,我忘了我把它作为回报。
  • 您是在询问 Doof 方法是否需要 await 关键字。它是否返回Task?它本身是使用await 关键字还是Task.Run()?如果是这样,那么是的 - 它可能应该被等待。
  • @Default 我不太担心回复。我想Doof 服务,然后应用程序可以忘记调用。

标签: c# async-await


【解决方案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.

【讨论】:

  • 对,所以如果返回无效,那么我仍然说await service.Doof(x)
  • @LukeDuddridge 该方法需要返回一个 Task 才能等待。
  • @Default ok,所以它不能为空。可以只是Task 还是需要返回类型?
  • Doof函数应该Async为前缀,以告知用户它使用async Task返回值。
  • @LukeDuddridge await Task 等同于 voidawait Task&lt;T&gt; 等价于返回值 T
【解决方案2】:

方法不必是async 才能等待。有很多方法返回 Task 并且可以被 await 使用,即使它们不是 async

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

您的CallService 方法不必是async;您可以返回从DoofAsync 获得的Task

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

【讨论】:

  • @LukeDuddridge 你的问题说你正在调查async-await,所以这就是斯蒂芬的答案。而且你不能合理地使用 VS 2010 中的async-await
  • @LukeDuddridge:我建议你升级。我不知道 VS2010->VS2012 的任何显示问题;事实上,这是最平滑的过渡之一。
  • @svick 哦 !"£**£"& 抱歉。在关键问题上完全空白,这意味着我不能使用异步等待!出于某种原因,我认为我可以......我们现在将被困在 VS2010 上,我们才刚刚获得 Windows 7!
猜你喜欢
  • 2011-05-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-18
  • 1970-01-01
  • 1970-01-01
  • 2020-06-06
相关资源
最近更新 更多