gpt4 book ai didi

c# - 为什么我的 RX 链阻塞?

转载 作者:行者123 更新时间:2023-12-03 02:56:23 25 4
gpt4 key购买 nike

所以我有以下 RX 更改,但它似乎阻止了选择,好像是为了保留顺序。我的理解是它应该继续委派给任务池?

var observable = Observable.Interval(TimeSpan.FromMilliseconds(10));

observable.ObserveOn(Scheduler.TaskPool)
.Select(
i =>
{
Console.WriteLine("Here" + System.Threading.Thread.CurrentThread.ManagedThreadId);
System.Threading.Thread.Sleep(5000);
return i;
})
.ObserveOn(Scheduler.TaskPool)
.SubscribeOn(Scheduler.TaskPool)
.Subscribe(i => { Console.WriteLine(i); });

最佳答案

确保事件连续传递给订阅者是 Rx 语法的核心部分,也是其正确操作的基础。大多数 Rx 运算符(operator)都强制执行这一点,您不应违反这一点。

ObserveOn 和 SubscribeOn 的机制得到了相当全面的阐述 here .

ObserveOn 的目的是避免阻塞正在分派(dispatch)事件的可观察对象的线程和/或控制订阅者接收事件的线程(在您的情况下使用任务池来传递事件)。

它不允许订阅者同时接收事件 - 正如我所说,这将违反 Rx 规则。

您可能会发现 this关于类似主题的问题也值得一读。

关于c# - 为什么我的 RX 链阻塞?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24637991/

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