在ReactiveX范式中,处理线程安全是消费者(IObserver)的责任吗?

E、 例如,当OnNext仍在另一个线程上执行时,是否出现OnCompleted调用?

看起来像是Rx的.净来源,但the docs个有点模糊.

推荐答案

自从我最初在tweet分中提出这个问题以来,我相信我现在已经找到了一个权威的答案.

似乎我错误地认为线程安全序列化是用户的责任(IObserver).

根据最初的Rx Design Guidelines份文件(似乎是一个最好保密的秘密:)

4.2. 假设以序列化方式调用观察者实例

As Rx使用推送模式和.NET支持多线程,它是

进一步:

6.7. 在可观察序列实现中序列化对IObserver个方法的调用Rx是一个可组合的API,许多操作员都可以使用

最后:

6.8. 避免序列化运算符,因为所有Rx运算符都必须遵守准则6.7,运算符可以安全地假定其输入为

我个人的看法是:如果一个生成IObservable的原始序列在调用OnNextOnErrorOnComplete(或者在订阅时调用Dispose)时可以引入并行性,那么应该注意将这些调用正确序列化.

.net相关问答推荐

NuGet 兼容与计算框架(Xamarin 和 .NET 6)

NET 6:控制器方法不可访问

如何在 .net MAUI 中删除不需要编译的平台?

IIS 发布 ASP.NET Core 应用程序而不关闭 IIS 网站

为什么(真的吗?)List 实现所有这些接口,而不仅仅是 IList

MongoDB C# 驱动程序 - 忽略绑定字段

如何解决请确保文件可访问并且它是有效的程序集或 COM 组件?

如何在 EF 代码优先中禁用链接表的级联删除?

Winforms:Application.Exit vs Environment.Exit vs Form.Close

Select 文件夹对话框 WPF

图像与位图类

日期时间是什么意思?在 C# 中是什么意思?

C#:获得完整的桌面大小?

形成两个列表并集的最简单方法

.NET 中的对象引用有多大?

有没有像样的 C# 分析器?

例外:不支持 URI 格式

如果锁定的对象内部发生异常,它会保持锁定状态吗?

System.IO.IOException:使用 System.IO.Path.GetTempFileName() 时文件存在 - 解决方案?

Windows 服务在哪个目录中运行?