gpt4 book ai didi

multithreading - Rx 调度程序和线程关联

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

无法理解,调度程序如何在 Rx 框架中工作。我运行代码,在下面提到并收到“选择线程”和“订阅线程”产生相同的值,而主线程产生另一个值。我认为“主线程”和“订阅线程”必须具有相同的值,而“选择线程”必须具有另一个值。

var obs = Observable.Range(1, 10)
.SubscribeOn(Scheduler.ThreadPool)
.ObserveOn(Scheduler.CurrentThread);

var data = obs.Select(x =>
{
Console.WriteLine("Select thread: {0}", Thread.CurrentThread.ManagedThreadId);
return x;
});

data.Subscribe(x => Console.WriteLine("Subscribe thread: {0}", Thread.CurrentThread.ManagedThreadId));

Console.WriteLine("Main thread: {0}", Thread.CurrentThread.ManagedThreadId);

最佳答案

您犯了与我认为每个人在第一次查看调度程序时都会犯的错误相同的错误——我确实犯了。

错误是认为Scheduler.CurrentThread使用 的线程定义 可观察的 - 相反,线程是 正在执行 可观察的。

所以Select仅在订阅了 observable 并且您已经在 ThreadPool 上订阅了它时才调用它它也将在同一线程( CurrentThread )上观察到。

关于multithreading - Rx 调度程序和线程关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8507909/

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