2017-03-22 1 views
-3

je l'ai essayé dans l'application de la consolese bloqué après l'envoi de la demande de async à Node.js serveur

public async Task<string> Getsmth(string a, string b, string c, HttpClient client) 
{ 
string str = "call to node.js" 
var response = await client.GetStringAsync(str); 
return response; 
} 

appeler dans l'application de la console a travaillé beaucoup, mais après avoir appelé même code dans api web, il est resté coincé dans la ligne d'attendre Après l'avoir appelé de manière synchrone (sans async/await), tout fonctionne correctement. Quel semble être le problème?! Comment le faire fonctionner de manière asynchrone?

+0

Lorsque vous dites que vous l'appelez sans async/await, renvoyez-vous toujours une tâche? –

Répondre

0

Essayez de changer votre action api pour retourner un Task<IHttpActionResult>, puis attendre Getsmth, comme ceci:

[Route("api/Getsmth/{a}/{b}/{c}")] 
public async Task<IHttpActionResult> Get(string a, string b, string c) 
{ 
    HttpClient client = new HttpClient(); 
    var r = await Getsmth(a, b, c, client); 
    return Ok(r); 
} 

Vous pouvez retourner Task<string> de Get aussi bien, puis juste return r à la place au lieu de Ok(r):

[Route("api/Getsmth/{a}/{b}/{c}")] 
public async Task<string> Get(string a, string b, string c) 
{ 
    HttpClient client = new HttpClient(); 
    var r = await Getsmth(a, b, c, client); 
    return r; 
} 
+0

merci - retourner la tâche a fait le travail! –