104 votes

Équivalent de Promise en C#

En Scala, il existe une classe Promise qui pourrait être utilisée pour compléter manuellement un Future. Je cherche une alternative en C#.

J'écris un test et je veux qu'il ressemble à ceci :

// var MyResult has a field `Header`
var promise = new Promise<MyResult>;

handlerMyEventsWithHandler( msg =>
    promise.Complete(msg);
);

// Wait for 2 seconds
var myResult = promise.Future.Await(2000);

Assert.Equals("my header", myResult.Header);

Je comprends que ce n'est probablement pas le bon modèle pour le C#, mais je n'ai pas réussi à trouver un moyen raisonnable d'obtenir la même chose, même avec un modèle quelque peu différent.

EDIT : veuillez noter que async / await n'est pas utile ici, car je n'ai pas de tâche à attendre ! J'ai juste un accès à un gestionnaire qui sera exécuté sur un autre thread.

3 votes

Je pense que vous cherchez Task<T> .

0voto

Kumareshan Points 613

Vous pouvez télécharger le futur( https://www.nuget.org/packages/Future/ ) de Nuget et peut être utilisé comme suit

        Promise<int> promise = new Promise<int>();
        new Task(() =>
        {
            Thread.Sleep(100);
            promise.Set(20);

        }).Start();
        int result=promise.Get();

Comme dans l'exemple, vous pouvez créer un objet promesse et faire un get pour obtenir le résultat, le get attendra que le résultat soit sur l'objet. Vous faites un set à partir d'un autre thread comme indiqué dans l'exemple ci-dessus.

Ce paquet fournit les deux classes suivantes

  1. Promesse : qui attend indéfiniment le résultat.

  2. TimedPromise : qui attend le résultat uniquement jusqu'à l'heure spécifiée. Si le résultat n'est pas disponible dans le temps imparti, il lance une exception de dépassement de délai.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X