C# 订阅后处理

C# 订阅后处理,c#,.net-core,system.reactive,rx.net,C#,.net Core,System.reactive,Rx.net,我有一个类,它包含热可观测的。它进行一些图像转换并收集度量(为了简单起见,示例中为int) 公共类提供程序 { 公共IObservable热可观测{get;} 公共提供者() { HotObservable=可观测时间间隔(时间跨度从秒(5)) .Select(x=>…)//此处进行一些处理 .Where(x=>…)//某些条件 .Publish()//使其变热 .RefCount();//有订阅时保持连接 } } 我想在另一个可观察的对象中公开没有图像的度量: public IObserva

我有一个类,它包含热可观测的。它进行一些图像转换并收集度量(为了简单起见,示例中为int)

公共类提供程序
{
公共IObservable热可观测{get;}
公共提供者()
{
HotObservable=可观测时间间隔(时间跨度从秒(5))
.Select(x=>…)//此处进行一些处理
.Where(x=>…)//某些条件
.Publish()//使其变热
.RefCount();//有订阅时保持连接
}
}
我想在另一个可观察的对象中公开没有图像的度量:

public IObservable metrics observable{get;}=HotObservable.Select(x=>x.Metric);

问题 客户端可以订阅其中任何一个,但
Bitmap
应在之后处理

客户机代码示例:

public void subscribebeclient()
{
MetricsObservable.Subscribe(metric=>AccumerateMetrics(metric));
热可观测(x=>
{
如果(x.Image.Width<1024)
上传图像(x.Image);
//在这种情况下,我可以在这里处理图像
});
}
更糟糕的情况是:

public void subscribebeclient()
{
MetricsObservable.Subscribe(metric=>AccumerateMetrics(metric));
//无法处理位图,因为它不在这里
}

问题:在RX中是否有可能在所有订阅完成后触发某种处理程序?或者也许有其他方法可以实现类似的行为?

就其本质而言,任何客户都可以使用可观察的。在您的特定情况下,谁来决定何时以及由谁来处置资源?最坏的情况是,一个客户端会在另一个客户端被允许使用实例之前先处理该实例。在我看来,处置资源根本不是消费者的责任。这是真实的,无论订阅了哪个可观察对象


在我看来,资源的发起人拥有它,并且应该注意在价值被释放后对其进行处置。

就其本质而言,任何客户都可以使用可观察的。在您的特定情况下,谁来决定何时以及由谁来处置资源?最坏的情况是,一个客户端会在另一个客户端被允许使用实例之前先处理该实例。在我看来,处置资源根本不是消费者的责任。这是真实的,无论订阅了哪个可观察对象


在我看来,资源的发起人拥有它,并且应该注意在值发出后处理它。

在这个设计中,我找不到一种在值发出后正确处理资源的方法,所以我最终重构了公开的API,这样它就不会向消费者提供任何一次性资源。通过这种方式,我能够在发起方端处理资源。在这个设计中发出值后,我找不到正确处理资源的方法,所以我最终以重构公开API的方式结束,这样它就不会向消费者提供任何可支配的资源。通过这种方式,我能够处理发起方方面的资源。