2013-03-08 7 views
1

Je cherche à utiliser les mots-clés asyncawait dans un appel à un service, mais je me demandais si le mot-clé await est nécessaire?Appel d'un service avec Async Await

Modification d'un exemple si trouvé; Ce que je voudrais faire est de configurer un async appel à un service qui obtient avec le travail, mais n'a pas besoin d'attendre une réponse:

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

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

} 
+0

ce qui est de retour '' Task ? –

+0

comment votre code est compilé? –

+0

Désolé copiait que d'un exemple, j'ai oublié que je l'ai laissé comme le retour. –

Répondre

1

Si vous déclarez votre fonction async et qu'elle retourne Tâche puis quelque chose dans votre code doit retourner ce type. Je ne vois rien dans votre code parce que vous n'utilisez pas le mot-clé await qui normalement proviendrait de votre fonction pendant que l'appel est envoyé au service, puis continuez à partir de la ligne suivante lorsque l'appel au service répond . Si vous ne vous souciez pas du retour du service, ignorez-le, mais utilisez le mot-clé await car cela permettra à votre code de continuer avec d'autres tâches pendant que l'appel de service est terminé.

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

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

} 

Notez également que si vous appelez un service à l'aide WCF, vous pouvez lancer un appel d'une manière qui complète une fois que le dernier octet du message est envoyé. Juval Lowy discusses one-way calls in this paper.

+0

droite donc si le retour si void alors je dis encore 'wait service.Doof (x)' –

+0

@LukeDuddridge la méthode doit retourner une 'Task' à être attendu. – Default

+0

@Default ok donc il ne peut pas être annulé. Peut-il s'agir simplement d'une tâche ou d'un type de retour? –

1

Une méthode ne doit pas nécessairement être async pour être attendue. Il existe de nombreuses méthodes qui renvoient Task et peuvent être utilisées par await, même si elles ne sont pas async. Je suppose que votre service est un service WCF. Dans ce cas, si vous (re) générez un proxy en utilisant VS2012, pour chaque méthode Doof sur votre service you'll get a DoofAsync method that will work with await. La méthode CallService n'a pas besoin d'être async; vous pouvez simplement retourner le Task que vous obtenez de DoofAsync:

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

nous utilisons vs2010 –

+1

@LukeDuddridge Votre question dit que vous êtes en train de regarder 'async'-' '' '' '' '' '' '' '' '' '' '' '' '' 'est ce que Stephen répond. Et vous ne pouvez pas raisonnablement utiliser 'async'-'await' de VS 2010. – svick

+0

@LukeDuddridge: Je vous recommande de mettre à jour. Je ne suis pas au courant de problèmes de showstopping de VS2010-> VS2012; en fait, c'est l'une des transitions les plus harmonieuses. –

Questions connexes