J'ai une bibliothèque de classes portable (PCL) ciblée sur Profile158 (Windows Store, .NET 4.5, Silverlight 5, Windows Phone 8). Je peux facilement travailler avec des méthodes qui retournent un type de tâche, et tout fonctionne comme je m'y attends. Chaque fois que j'accède à la propriété Result, il termine l'exécution du code asynchrone et renvoie le résultat. Cependant, si j'utilise les mots-clés async/await dans une méthode à l'intérieur de la PCL, je récupère une tâche. Toutefois, lorsque j'essaie d'accéder à la propriété Result, il bloque et ne retourne jamais.Utilisation de Microsoft.bcl.async en PCL avec Mono Droid?
regardant la fenêtre de sortie de débogage dans Visual Studio dans les deux cas, je vois le même texte:
Thread started:
Thread started:
Loaded assembly: Mono.Security.dll [External]
Thread started:
Thread started:
Il apparaît donc comme si le code est en cours d'exécution, mais il ne revient jamais au thread d'interface utilisateur. Est-ce que quelqu'un d'autre a essayé d'utiliser un PCL avec Microsoft.bcl.async dans le PCL?
Mon projet Mono Droid est destiné à Android 2.1.
Merci, - John
Mise à jour:
Voici quelques informations supplémentaires sur les différents scénarios. Tout d'abord, voici le code qui ne fonctionne sur Mono Droid lorsqu'il est écrit dans le code de l'interface utilisateur:
var task = request.GetResponseAsync();
string html = task.Result.GetResponseText();
J'ai ensuite créé la méthode suivante dans la PCL:
public async Task<string> Test()
{
IHttpResponse responce = await GetResponseAsync();
return responce.GetResponseText();
}
Et appelez avec ce code de la mono code de l'interface utilisateur:
string html = request.Test().Result;
retourne jamais ...
Si vous utilisez la propriété Result, cela bloquera jusqu'à la fin de la tâche. Si vous faites cela à partir du même thread où la tâche elle-même doit s'exécuter, vous vous êtes essentiellement donné une impasse. Ce n'est pas du tout clair sur ce que fait votre code en ce moment ... avez-vous un programme court mais complet démontrant le problème? –
@dsplaisted utilisé cette couche avec MonoDroid lors de sa démo à BUILD - http://channel9.msdn.com/Events/Build/2012/3-004 - Je vais ajouter l'étiquette PCL à ce poste et mettre un signal de chauve-souris - il sera là pendant les heures de Redmond ... – Stuart
Non lié à votre question, mais Microsoft.Bcl.Async est encore en version bêta. L'utiliser dans n'importe quel code de production doit être évité. Bien sûr, vous pourriez juste le tester en ce moment. –