Quel est le problème avec cette Tâche asynchrone de la méthode?
C'est juste une simple async tâche, mais j'ai toujours eu d'étranges erreurs du compilateur. Ce code à partir d'une API Web service dans un ASP.NET 4 projet de, créé avec VS2010.
Même ContinueWith (non générique) renvoie la Tâche de manière implicite, mais cette erreur existe toujours.
Code:
public class TestController : ApiController
{
public Task<HttpResponseMessage> Test()
{
string url = "http://www.stackoverflow.com";
var client = new HttpClient();
return client.GetAsync(url).ContinueWith<HttpResponseMessage>((request) =>
{
//Error 361 'System.Threading.Tasks.Task' does not contain a definition
//for 'Result' and no extension method 'Result' accepting a first argument
//of type 'System.Threading.Tasks.Task' could be found
//(are you missing a using directive or an assembly reference?)
var response = request.Result;
response.EnsureSuccessStatusCode();
//Error 364 Cannot implicitly convert type 'System.Threading.Tasks.Task<System.Net.Http.HttpResponseMessage>' to 'System.Net.Http.HttpResponseMessage'
return response.Content.ReadAsStringAsync().ContinueWith<HttpResponseMessage>((read) =>
{
return new HttpResponseMessage();
});
});
}
}
OriginalL'auteur Tien Do | 2012-03-21
Vous devez vous connecter pour publier un commentaire.
364 erreur est tout à fait normal parce que vous êtes de retour d'une
Task<Task<HttpResponseMessage>>
au lieu deTask<HttpResponseMessage>
. Une fois que vous avez corrigé que l'361 erreur disparaîtront également.De sorte que vous pourriez
Unwrap
le résultat:J'ai mis à jour ma réponse avec un meilleur exemple à l'aide de
Unwrap
. Cela permettra d'assurer que le thread de travail sera gratuit lors de l'exécution de la requête HTTP.OriginalL'auteur Darin Dimitrov