如何将以下 class 变成 IObservable?
How do I turn the following class into an IObservable?
我有以下类
namespace TickRateEntity
{
public struct TickRateData
{
public double tickrate;
}
public class TickRate
{
private TickRateData tickRateData;
//etc
}
}
如何更改这些 类 以便每隔 n 分钟,TickRate 或 TickRateData 数据发布双倍 tickrate
?
假设您有一个带有签名 TickRate GetTickRate()
的方法,那么这有效:
int n = 5;
IObservable<double> query =
from x in Observable.Interval(TimeSpan.FromMinutes(n))
let tickRate = GetTickRate()
select tickRate.tickRateData.tickrate;
IDisposable subscription = query.Subscribe(x => /* do something with `x` */);
否则,如果 TickRate
是以其他方式生成的,我们需要知道如何回答这个问题。
假设您的 tickRateData
以某种方式填充,那么您可以这样做:
public class TickRate : IDisposable
{
private TickRateData tickRateData;
private readonly IDisposable _subscription;
public IObservable<double> Stream { get; }
public TickRate(double intervalInMinutes)
{
var stream = Observable.Interval(TimeSpan.FromMinutes(intervalInMinutes))
.Select(_ => tickRateData.tickrate)
.Publish();
_subscription = stream.Connect();
Stream = stream;
}
public void Dispose()
{
_subscription?.Dispose();
}
}
我有以下类
namespace TickRateEntity
{
public struct TickRateData
{
public double tickrate;
}
public class TickRate
{
private TickRateData tickRateData;
//etc
}
}
如何更改这些 类 以便每隔 n 分钟,TickRate 或 TickRateData 数据发布双倍 tickrate
?
假设您有一个带有签名 TickRate GetTickRate()
的方法,那么这有效:
int n = 5;
IObservable<double> query =
from x in Observable.Interval(TimeSpan.FromMinutes(n))
let tickRate = GetTickRate()
select tickRate.tickRateData.tickrate;
IDisposable subscription = query.Subscribe(x => /* do something with `x` */);
否则,如果 TickRate
是以其他方式生成的,我们需要知道如何回答这个问题。
假设您的 tickRateData
以某种方式填充,那么您可以这样做:
public class TickRate : IDisposable
{
private TickRateData tickRateData;
private readonly IDisposable _subscription;
public IObservable<double> Stream { get; }
public TickRate(double intervalInMinutes)
{
var stream = Observable.Interval(TimeSpan.FromMinutes(intervalInMinutes))
.Select(_ => tickRateData.tickrate)
.Publish();
_subscription = stream.Connect();
Stream = stream;
}
public void Dispose()
{
_subscription?.Dispose();
}
}