C# 如何开始评估冷态IObservable
我想,冷的iobservable,比如从C# 如何开始评估冷态IObservable,c#,system.reactive,observable,C#,System.reactive,Observable,我想,冷的iobservable,比如从Observable.Create返回的iobservable,会在订阅时进行评估。我订阅了。IObservable未进行评估 class Program { static IObservable<int> HotSource() { return Observable.Generate<int, int>(0, x => x <= 100, x => x + 1, x =>
Observable.Create
返回的iobservable,会在订阅时进行评估。我订阅了。IObservable未进行评估
class Program
{
static IObservable<int> HotSource()
{
return Observable.Generate<int, int>(0, x => x <= 100, x => x + 1, x => x);
}
static IObservable<int> ColdSource()
{
return Observable.Create<int>(subscriber => () =>
{
for (int i = 0; i <= 100; ++i)
{
subscriber.OnNext(i);
}
});
}
static void Process(IObservable<int> numbers)
{
numbers
.Take(15)
.Subscribe(Console.WriteLine);
}
static void Main(string[] args)
{
Console.WriteLine("Hot");
Process(HotSource());
Console.WriteLine("Cold");
Process(ColdSource());
Console.WriteLine("End");
Console.ReadLine();
}
}
类程序
{
静态IObservable热源()
{
生成(0,x=>x+1,x=>x);
}
静态IObservable ColdSource()
{
返回可观察的。创建(订阅服务器=>()=>
{
对于(int i=0;i您的创建方法已关闭。这将起作用:
static IObservable<int> ColdSource()
{
return Observable.Create<int>(subscriber =>
{
for (int i = 0; i <= 100; ++i)
{
subscriber.OnNext(i);
}
subscriber.OnCompleted();
return Disposable.Empty;
});
}
如果hotSource
真的很热门,每个数字只打印一次,或者同时打印(1、1、2、2等)。你说的“未评估”到底是什么意思?你看到了什么?如果你删除Take
调用,会有什么变化吗?(感谢完整的示例-我会在可能的时候运行它。)我看到了HotSource
中打印的数字(当我取消对HotSource
的调用时,它消失了)。当我在ColdSource
中设置一个操作断点时,它不会触发。Take
只是减少了HotSource
中的数字量,这并不是真的需要。HotSource()
实际上返回了一个coldIObservable
,因为只有在订阅时才会生成值。如果您从create返回一个IDisposable
,请确保使用subscriber.OnCompleted()
,另一个选项是不返回IDisposable
,而Create
的重载将自动调用OnCompleted()
。已添加OnCompleted。谢谢。现在已添加OnCompleted:)更改不会第一次出现。
static void Main(string[] args)
{
Console.WriteLine("Hot 1");
var hotSource = HotSource();
Process(hotSource);
Thread.Sleep(TimeSpan.FromSeconds(2));
Console.WriteLine("Hot 2");
Process(hotSource);
Console.ReadLine();
}