rx in .NET 3.5不是异步吗?
-
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