À l'aide asynchrone en fonction des méthodes statiques
J'ai une méthode statique qui je m'appel async
méthode (xmlHelper.LoadDocument()). et j'ai appeler cette méthode dans une propriété au Setter section
internal static IEnumerable<Word> LoadTenWords(int boxId)
{
XmlHelper xmlHelper = new XmlHelper();
XDocument xDoc = xmlHelper.LoadDocument().Result;
return xDoc.Root.Descendants("Word").Single(...)
}
Comme vous le savez LoadTenWord est statique et ne peut pas être une méthode async, je l'appelle LoadDocument avec le Résultat de la propriété. Quand je lance mon application l'application ne fonctionne pas mais quand je debug et j'attends dans la ligne suivante
XDocument xDoc = xmlHelper.LoadDocument().Result;
tout est ok!!! Je pense, sans await
mot-clé, C# ne pas attendre pour le processus complètement terminé.
avez-vous une suggestion pour résoudre mon problème?
Où est XmlHelper défini? Ce n'est pas un Système.Xml.Linq classe est-il?
J'ai créer moi-même, il est pour le Windows Store app
Ainsi, le code que vous avez posté ci-dessus semble OK pour moi (le Résultat devrait bloquer sur l'achèvement de la méthode), alors peut-être il y a un problème dans votre XmlHelper classe?
J'ai créer moi-même, il est pour le Windows Store app
Ainsi, le code que vous avez posté ci-dessus semble OK pour moi (le Résultat devrait bloquer sur l'achèvement de la méthode), alors peut-être il y a un problème dans votre XmlHelper classe?
OriginalL'auteur Mahdi | 2012-11-26
Vous devez vous connecter pour publier un commentaire.
Le fait que la méthode est
static
ne pas dire qu'il ne peut pas être marqués commeasync
.À l'aide de
Result
résultats de la méthode de blocage jusqu'à ce que la tâche est terminée. Dans votre environnement, c'est un problème; vous avez besoin de pas bloc mais simplementawait
la tâche (ou utiliser une poursuite pour traiter les résultats, maisawait
est beaucoup plus facile).C'est très bien:
public static Task<IEnumerable<Word>> Words { get { return LoadTenWords(0); } }
Si vous avez quelque chose de plus complexe, vous allez avoir besoin de fournir plus d'informations. Si il ya beaucoup plus à lui que vous voulez poser une autre question.yap, je dois poser une autre question
OriginalL'auteur Servy
Result
déjà blocs jusqu'à ce que la suite existe. Si l'OP code ne fonctionne pas, ce ne serait pas non plus.J'ai compris qu'en appelant directement le résultat peut causer des problèmes de threading/conditions de course. L'appel d'attendre permettrait de résoudre ce problème. l'idéal serait de tout simplement attendre, mais si que n'est pas disponible
Wait()
est l'option suivante.Result
etWait
allons faire exactement la même chose ici. Soit on va travailler ou qu'aucun ne. Il n'y a pas de conditions de course queResult
introduit.OriginalL'auteur Jason Meckley