我在.Net3.5SP1中使用Rx并尝试使用101 Rx Samples。我正在尝试第一个示例(开始 - 异步运行代码),但它似乎并不实际运行异步。例如,.net 3.5中的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]
对此有一个解释?难道我做错了什么?这是预期的行为?
UPDATE
我还以为它会说
[Creating]
[Created]
[Starting]
Calculating...
[Started]
<...3 Second Wait...>
Done.
但是,尽管据说非同步调用发生在主线程被阻塞。
不,这不是问题......问题是事件的顺序。我本来以为会说 [创建] [创建] [开始] 计算... [开始] <... 3秒的等待...> 完成。 但是,主线程被阻止,而据称异步调用发生... – 2010-02-19 20:03:54
@kouPhax:First()方法必须*返回值,但是,不是吗? (在这种情况下,值只是'单位',但仍然...)这意味着它只能在*计算完成后才能完成。基本上,计算*是异步执行的,但First()调用等待它完成。该评论明确表示:“//订阅并等待后台操作完成” – 2010-02-19 20:13:40
哈!假设我应该学会阅读!谢谢 – 2010-02-19 20:16:47