Utilisation de la méthode async wait in inside void

J’ai une méthode avec signature que je ne peux pas changer. CA devrait etre

protected override void OnInitialize() 

À l’aide de Windows 8 Metro API, je dois vérifier si le fichier existe et le lire, à l’intérieur de cette méthode NoSignatureChange. En utilisant PlainOldCSharp, j’écrirais quelque chose comme

 protected override void OnInitialize() { ... try { var file = folder.OpenFile(fileName); fileExists=true; } catch(FileNotFoundException) { fileExists=false } } 

N’oubliez pas que, dans l’ API Windows 8, le seul moyen de vérifier si un fichier existe est de gérer FileNotFoundException. De plus, dans l’API Windows 8, toute l’API FileIO est asynchrone, je n’ai donc que la méthode file.OpenFileAsync.

La question est donc de savoir comment écrire ce code à l’aide de la méthode folder.OpenFileAsync dans l’API Windows 8 sans modifier la signature de la méthode conteneur.

Vous pouvez toujours créer une méthode void async:

 protected async void CannotChangeSignature() { ... } 

Les types de retour valides pour une méthode asynchrone sont les suivants:

  • void
  • Task
  • Task

Cependant, si vous voulez le bloquer, alors vous vous battez essentiellement contre la plate-forme – le but est d’ éviter le blocage.

Vous dites que vous ne pouvez pas changer la signature – mais si vous comptez sur ce blocage, vous devez changer votre approche du codage.

Idéalement, vous devriez changer la signature en Task :

 protected async Task CannotChangeSignature() { ... try { await ApplicationData.Current.LocalFolder.GetFileAsync(fileName); return true; } catch(FileNotFoundException) { return false; } } 

EDIT: Si vous en avez vraiment besoin, vous devez simplement appeler AsTask().Wait() , intercepter l’ FileNotFoundException AggregateException et vérifier si elle contient une FileNotFoundException . C’est vraiment assez horrible cependant … ne pouvez-vous pas concevoir cela de manière à éviter tout blocage? Par exemple, commencez à rechercher le fichier et affichez une erreur (ou autre) si et quand vous trouvez qu’il n’existe pas.