Ich spiele mit Rx in. Net3.5SP1 und versuche die 101 Rx Samples. Ich versuche das erste Beispiel (Start - Code asynchron ausführen), aber es scheint nicht wirklich asynchron zu laufen. Zum BeispielRx in .Net 3.5 nicht asynchron?
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]");
Ausgänge
[Creating]
[Created]
[Starting]
Calculating...
<...3 Second Wait...>
Done.
[Started]
Gibt es eine Erklärung dafür? Mache ich etwas falsch? Ist das erwartetes Verhalten?
UPDATE
ich es gesagt haben
[Creating]
[Created]
[Starting]
Calculating...
[Started]
<...3 Second Wait...>
Done.
Aber der Haupt-Thread blockiert wird, während die angeblich Asynch Anruf passiert wäre hätte gedacht.
Nein, das ist nicht das Problem ist ... die Frage der Reihenfolge der Ereignisse ist. Ich hätte gedacht, es hätte gesagt [Erstellen] [Erstellt] [Starten] berechnen ... [Gestartet] <... 3 Zweite warten ...> Fertig. Aber der Haupt-Thread ist blockiert, während der vermeintlich Asynch Anruf passiert ... –
@kouPhax: Die First() -Methode muss * den Wert * aber * zurückgeben, nicht wahr? (Zugegebenermaßen ist der Wert in diesem Fall nur "Unit", aber immer noch ...) Dies bedeutet, dass er erst nach dem Abschluss der Berechnung abgeschlossen werden kann. Im Grunde läuft die Berechnung * asynchron, aber der First() - Aufruf wartet darauf, dass er abgeschlossen wird. Der Kommentar sagt explizit, dass: "// subscribe und warten auf Abschluss der Hintergrundoperation" –
Ha! Angenommen, ich sollte lesen lernen! Vielen Dank –