我認爲,只要對它們進行預訂,就會評估冷的IObservables,就像從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();
}
}
什麼*確切*你的意思是「沒有評估」?你看見什麼了?如果您刪除「Take」呼叫,是否有任何變化? (謝謝你的完整樣本 - 當我可以運行它時)。 –
我從'HotSource'看到打印的數字(當我移除對'HotSource'的調用時,它消失了)。當我在'ColdSource'內部放置一個斷點時,它不會觸發。 'Take'只是減少了'HotSource'的數量,這並不是真的需要。 – user2136963
您的'HotSource()'實際上會返回一個冷的'IObservable',因爲這些值只會在訂閱時生成。 – Lukazoid