C# 使用异步等待调用服务

C# 使用异步等待调用服务,c#,async-await,C#,Async Await,我正在考虑在服务调用中使用asyncawait关键字,但想知道是否需要await关键字 如果发现,则修改示例;我想做的是设置一个async调用,调用一个正在进行作业的服务,但不需要等待响应: async Task CallService(InformationForService informationForService) { var service = SetupService(); // Does this need the await keyword? serv

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

如果发现,则修改示例;我想做的是设置一个
async
调用,调用一个正在进行作业的服务,但不需要等待响应:

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

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

}

如果将函数声明为async并返回Task,则代码中的某些内容需要返回该类型。我在您的代码中没有看到任何这样的情况,因为您没有使用wait关键字,当调用被发送到服务时,它通常会从您的函数中产生,然后在服务调用响应时从下一行继续

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

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

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

}
异步任务调用服务(InformationForService InformationForService)
{
var service=SetupService();
//这需要等待关键字吗?
等待服务。Doof(信息服务);
}

另外,请注意,如果使用WCF调用服务,则可以发出单向调用,该调用在发送消息的最后一个字节后完成

方法不必是
async
即可等待。有许多方法返回
任务
,可供
等待
使用,即使它们不是
异步

我假设您的服务是WCF服务。在这种情况下,如果您使用VS2012(重新)生成一个代理,则针对服务上的每个方法
Doof

您的
CallService
方法不需要是
async
;您只需返回从
DoofAsync
获取的
任务

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

返回的是什么
Task
?您的代码是如何编译的?很抱歉,我是从一个示例中复制的,我忘了我把它作为返回。您是在问方法
Doof
是否需要wait关键字。它是否返回任务?它本身是否使用
wait
关键字或
Task.Run()
?如果是的话,那么是的——这可能需要等待。@默认情况下,我不太担心会有什么反应。我想
Doof
服务,然后应用程序可以忘记调用。对,如果返回if void,那么我仍然说
等待服务。Doof(x)
@LukeDuddridge方法需要返回一个
任务
才能等待。@默认为ok,所以它不能无效。它可以是
Task
还是需要返回类型?
Doof
函数的前缀应该是
Async
,以通知用户它使用了
Async Task
返回值。@LukeDuddridge
wait Task
等同于
void
Wait Task
与返回值
T
@LukeDuddridge等效。您的问题说您正在研究
async
-
Wait
,所以这就是Stephen的答案。而且您不能合理地使用VS2010中的
async
-
wait
。@LukeDuddridge:我建议您升级。我不知道VS2010->VS2012中有任何停止播放的问题;事实上,这是最平滑的过渡之一。@svick噢!对不起。完全忽略了关键问题,这意味着我不能使用Async Wait!因为某种原因我以为我可以。。。我们将停留在VS2010上,现在,我们只得到Windows7!