Может кто-нибудь помочь объяснить, почему, когда я "блокирую и продолжаю" последовательность onNext наблюдателя, подписанную на буфер с наблюдаемой во времени последовательностью, этот Scheduler.NewThread больше не применяется?
Например:
Если я буферизую последовательность чисел через
var query = from number in Enumerable.Range(1,200)
select SnoozeNumberProduction(number);
var observableQuery = query.ToObservable();
var bufferedSequence = observableQuery.Buffer(TimeSpan.FromSeconds(2));
Где SnoozeNumberProduction задерживает генерацию номера на 250 мс
static int SnoozeNumberProduction(Int32 number)
{
Thread.Sleep(250);
return number;
}
Теперь позже, если я подпишусь на bufferedSequence с помощью «ObserveOn (Scheduler.NewThread)», чтобы я блокировал четвертый буфер с помощью Console.ReadKey
Random random = new Random();
Int32 count = 0;
bufferedSequence.ObserveOn(Scheduler.NewThread).Subscribe(list =>
{
Console.WriteLine("({0}) Numbers from {1}-{2} produced on Thread ID {3}", list.Count, list[0], list[list.Count -1], Thread.CurrentThread.ManagedThreadId);
Thread.Sleep(1000);
count++;
if (count == 4)
{
Console.WriteLine("count reached to 4, blocking ... press any key to continue ");
Console.ReadKey(); // Block and build up the queue
}
Console.WriteLine("Woken " + list[0] + " - " + list[list.Count - 1]);
});
В этом случае, если я нажимаю какую-либо клавишу примерно через 10 секунд или около того, я вижу, что следующие несколько буферов выполняются на том же ManagedThread, даже если Scheduler.NewThread упоминается в ObserveOn. Может кто-нибудь помочь объяснить это поведение?
Пример вывода:
(7) Numbers from 1-7 produced on Thread ID 12
Woken 1 - 7
(9) Numbers from 8-16 produced on Thread ID 14
Woken 8 - 16
(8) Numbers from 17-24 produced on Thread ID 15
Woken 17 - 24
(8) Numbers from 25-32 produced on Thread ID 16
count reached to 4, blocking ... press any key to continue
Woken 25 - 32
(8) Numbers from 33-40 produced on Thread ID **16**
Woken 33 - 40
(8) Numbers from 41-48 produced on Thread ID **16**
Woken 41 - 48
(8) Numbers from 49-56 produced on Thread ID **16**
Woken 49 - 56
(8) Numbers from 57-64 produced on Thread ID **16**
Woken 57 - 64
(8) Numbers from 65-72 produced on Thread ID **16**
Woken 65 - 72
(8) Numbers from 73-80 produced on Thread ID **16**
Woken 73 - 80
(8) Numbers from 81-88 produced on Thread ID **16**
Woken 81 - 88
(8) Numbers from 89-96 produced on Thread ID **16**