Écrire une méthode Asynchrone qui attendent un bool

Je voudrais écrire une méthode qui await pour une variable à true.

Voici le psudo code.

bool IsSomethingLoading = false
SomeData TheData;

public async Task<SomeData> GetTheData()
{
   await IsSomethingLoading == true;
   return TheData;
}

TheData sera fixé par un Prisme Événement avec l' IsSomethingLoading variable.

J'ai un appel à la GetTheData méthode, mais je tiens à exécution asynchrone (à droite maintenant, il renvoie la valeur null si les données ne sont pas prêtes. (Qui conduit à d'autres problèmes.)

Est-il un moyen de faire cela?

Pourquoi ne pas utiliser une attente de la poignée?
il se sent comme quelque chose qui manque ici.. ne pas le await IsSomethingLoading == true plutôt être await InitiateLoading();?
Je pense que je veux asynchrone attendre. (Mais je ne suis pas sûr.) Mon appel de méthode va définir un temps d'attente de l'indicateur sur une partie de l'écran. Lorsque l'appelant renvoie l'attente de l'indicateur sera supprimé. Mais j'ai besoin de l'INTERFACE utilisateur réactive pendant le temps de l'attente de l'indicateur est affiché. Le "Rappel" du style de Async/Await semble offrir ce...
Si vous allez être en utilisant le TPL beaucoup il est probable que vous n'avez pas à être l'aide d'un BackgroundWorker beaucoup, ou pas du tout. Utilisez simplement Task.Run d'effectuer des travaux dans un thread d'arrière-plan, await la tâche, et puis tout le code qui utilise le résultat va au bout de la await. Beaucoup plus rapide à écrire, plus facile d'erreur de manipulation, tout autour de la bonté.
Comme je l'ai montré dans ma réponse, vous pouvez utiliser un TaskCompletionSource pour convertir le code à l'aide d'un modèle plus ancien dans un Task, de sorte que vous pouvez ensuite await, mais, idéalement, au fil du temps, ou pour de futurs produits, vous pouvez utiliser Task tout le chemin à travers; il le rend plus facile si vous le faites.

OriginalL'auteur Vaccano | 2013-02-27