Kann jemand bitte helfen, erklären, warum, wenn ich "blockieren und fortsetzen" Beobachter onNext Sequenz einen Puffer mit Zeit beobachtbare Sequenz abonniert, dass Scheduler.NewThread nicht mehr gelten?
Zum Beispiel:
Wenn ich eine Folge von Zahlen über
var query = from number in Enumerable.Range(1,200)
select SnoozeNumberProduction(number);
var observableQuery = query.ToObservable();
var bufferedSequence = observableQuery.Buffer(TimeSpan.FromSeconds(2));
Wobei SnoozeNumberProduction die Nummerngenerierung um 250 ms verzögert
static int SnoozeNumberProduction(Int32 number)
{
Thread.Sleep(250);
return number;
}
Wenn ich nun später die gepufferte Sequenz mit einem "ObserveOn(Scheduler.NewThread)" so abonniere, dass ich auf dem vierten Puffer mit einem Console.ReadKey blockiere
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]);
});
In diesem Fall, wenn ich nach etwa 10 Sekunden eine Taste drücke, sehe ich, dass die folgenden Puffer auf demselben ManagedThread ausgeführt werden, selbst wenn Scheduler.NewThread in ObserveOn erwähnt wird. Kann jemand bitte dieses Verhalten erklären?
Beispielhafte Ausgabe:
(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**