gpt4 book ai didi

.net - .Net 3.5 中的 Rx 不是异步的?

转载 作者:行者123 更新时间:2023-12-04 20:59:41 24 4
gpt4 key购买 nike

我正在 .Net3.5SP1 中使用 Rx 并尝试使用 101 Rx Samples .我正在尝试第一个示例(开始 - 异步运行代码),但它似乎并没有真正异步运行。例如,

        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.

但是当发生所谓的异步调用时,主线程被阻塞了。

最佳答案

这在我看来是合理的。

如果您输入 Thread.Sleep在“创建”和“开始”之间调用我想你会看到“计算”行出现,表明它在主线程运行时正在工作。这就是它异步的方式。

如果您担心是因为 First()返回值本身,而不是提供一种您可以稍后引用的“ future ”值,这是另一回事 - 我有两篇博客文章供您阅读:part 1 ; part 2 .我想你想要 Prune方法,但我不完全确定。

关于.net - .Net 3.5 中的 Rx 不是异步的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2299118/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com