У меня есть немного кода, который, как я ожидал, будет работать таким образом, и это не так, мне интересно, что я делаю неправильно:
class Program
{
static void Main(string[] args)
{
var ints = Observable.Interval(TimeSpan.FromMilliseconds(1000));
var windowed = ints.Window(() => ints.Select(i => i / 3).DistinctUntilChanged());
windowed.Subscribe(HandleNewWindow);
Console.ReadLine();
}
public static void HandleNewWindow(IObservable<long> ints)
{
Console.WriteLine("New sequence received");
ints.Subscribe(Console.WriteLine);
}
}
Выходные данные для этого должны быть:
Получена новая последовательность
0
1
2
Получена новая последовательность
3
4
5
Получена новая последовательность
6
7
8
...
но это:
Получена новая последовательность
0
Получена новая последовательность
1
Получена новая последовательность
2
Получена новая последовательность
3
Получена новая последовательность
4
Получена новая последовательность
5
Получена новая последовательность
6
...
Обратите внимание, если я использую другую строку для определения моего окна, например:
var windowed = ints.Window(() => Observable.Interval(TimeSpan.FromMilliseconds(3000)));
тогда все нормально работает.
Есть ли у Window проблема с использованием закрытий окон, которые получены из Observable, это окна, или я здесь упускаю что-то важное?