我有一个应用程序与多个观察者一起运行可观察的间隔。每隔 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)