Je joue avec Rx dans .Net3.5SP1 et en essayant le 101 Rx Samples. J'essaie le premier exemple (Start - Run Code asynchrone) mais il ne semble pas réellement fonctionner de manière asynchrone. Par exemple,Rx dans .Net 3.5 non asynchrone?
Console.WriteLine("[Creating]");
var o = Observable.Start(() =>
{
Console.WriteLine("Calculating...");
Thread.Sleep(3000);
Console.WriteLine("Done.");
});
Console.WriteLine("[Created]");
Console.WriteLine("[Starting]");
o.First(); // subscribe and wait for completion of background operation
Console.WriteLine("[Started]");
Sorties
[Creating]
[Created]
[Starting]
Calculating...
<...3 Second Wait...>
Done.
[Started]
Y at-il une explication à cela? Est-ce que je fais quelque chose de mal? Est-ce que ce comportement est attendu?
MISE À JOUR
je l'aurais pensé qu'il aurait dit
[Creating]
[Created]
[Starting]
Calculating...
[Started]
<...3 Second Wait...>
Done.
Mais le fil conducteur est bloqué alors que l'appel soi-disant Asynch arrive.
Non, ce n'est pas la question ... la question est la séquence des événements. Je l'aurais pensé qu'il aurait dit [Création] [créé] [Démarrage] Calcul ... [Démarré] <... 3 Second WAIT ...> Terminé. Mais le thread principal est bloqué pendant l'appel supposé Asynch ... –
@kouPhax: La méthode First() doit * renvoyer * la valeur, n'est-ce pas? (Certes, la valeur est simplement 'Unit' dans ce cas, mais tout de même ...) Cela signifie qu'elle ne peut pas se terminer tant que * le calcul n'est pas terminé. Fondamentalement, le calcul * est * allumé de manière asynchrone, mais l'appel First() attend qu'il se termine. Le commentaire dit explicitement que: "// s'abonner et attendre la fin de l'opération en arrière-plan" –
Ha! Supposons que je devrais apprendre à lire! Merci –