.NET 3.5のRXは非同期ではありませんか?
-
21-09-2019 - |
質問
私は.NET3.5SP1でRXで遊んでいて、 101 RXサンプル. 。私は最初のサンプルを試しています(スタート - コードを非同期に実行します)が、実際には非同期に実行されていないようです。例えば、
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]");
出力
[Creating]
[Created]
[Starting]
Calculating...
<...3 Second Wait...>
Done.
[Started]
これには説明がありますか?私は何か間違ったことをしていますか?これは予想される動作ですか?
アップデート
私はそれが言っただろうと思っていただろう
[Creating]
[Created]
[Starting]
Calculating...
[Started]
<...3 Second Wait...>
Done.
しかし、メインスレッドはブロックされ、おそらくアシンチコールが発生します。
他のヒント
この線 // subscribe and wait for completion of background operation
バックグラウンド操作が完了するのを待つと言います。したがって、その行に従うコードは期待できません(Console.WriteLine("[Started]");
)操作が完了するまで実行するには?
最初はブロックしています...サブスクライブはあなたが望むものです:
public static void Main(string[] args) {
Console.WriteLine("[Creating]");
var o = Observable.Start(() =>
{
Console.WriteLine("Calculating...");
Thread.Sleep(3000);
});
Console.WriteLine("[Created]");
Console.WriteLine("[Starting]");
o.Subscribe(_ => Console.WriteLine("Done.")); // subscribe and wait for completion of background operation
Console.WriteLine("[Started]");
Console.ReadKey();
}
所属していません StackOverflow