小编dot*_*tnz的帖子

等待 Rx 观察者完成而不使用锁

我有一个应用程序与多个观察者一起运行可观察的间隔。每隔 0.5 秒,该时间间隔就会从 Web 服务器加载一些 XML 数据,然后观察者在后台线程上执行一些特定于应用程序的处理。一旦不再需要数据,订阅和可观察间隔就会被释放,因此观察者的 OnNext/OnCompleted/OnError 将不再被调用。到目前为止,一切都很好。

我的问题:在某些罕见的情况下,调用 Dispose 后我的观察者的 OnNext 方法可能仍在运行!在处理后进行进一步操作之前,我想确保OnNext已经完成。

我当前的解决方案:我在观察者类中引入了一个储物柜字段(请参阅代码)。处置后,我尝试获取锁,并仅在获取锁后才继续。虽然这个解决方案有效(?),但在某种程度上我感觉不对。

问题:有没有更优雅、更“Rx Way”来解决这个问题?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Reactive.Concurrency;
using System.Reactive.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace RxExperimental
{
    internal sealed class MyXmlDataFromWeb
    {
        public string SomeXmlDataFromWeb { get; set; }
    }

    internal sealed class MyObserver : IObserver<MyXmlDataFromWeb>
    {
        private readonly object _locker = new object();
        private readonly string _observerName;

        public MyObserver(string observerName) {
            this._observerName = observerName;
        }

        public object Locker {
            get …
Run Code Online (Sandbox Code Playgroud)

c# multithreading system.reactive

3
推荐指数
1
解决办法
3628
查看次数

标签 统计

c# ×1

multithreading ×1

system.reactive ×1