Attualmente sto cercando di avvolgere la mia mente sulla concorrenza con RX .NET e di confondermi con qualcosa. Voglio eseguire quattro attività relativamente lente in parallelo, quindi ho pensato che fosse la NewThreadScheduler.Default
la strada da percorrere, dato che è "Rappresenta un oggetto che pianifica ogni unità di lavoro su un thread separato.".NewThreadScheduler.Programmi predefiniti tutti funzionano sullo stesso thread
Ecco il mio codice di installazione:
static void Test()
{
Console.WriteLine("Starting. Thread {0}", Thread.CurrentThread.ManagedThreadId);
var query = Enumerable.Range(1, 4);
var obsQuery = query.ToObservable(NewThreadScheduler.Default);
obsQuery.Subscribe(DoWork, Done);
Console.WriteLine("Last line. Thread {0}", Thread.CurrentThread.ManagedThreadId);
}
static void DoWork(int i)
{
Thread.Sleep(500);
Console.WriteLine("{0} Thread {1}", i, Thread.CurrentThread.ManagedThreadId);
}
static void Done()
{
Console.WriteLine("Done. Thread {0}", Thread.CurrentThread.ManagedThreadId);
}
ho assunto la "X Discussione Y" sarebbe uscita un thread diverso id ogni volta, ma la produzione effettiva è:
Starting. Thread 1
Last line. Thread 1
1 Thread 3
2 Thread 3
3 Thread 3
4 Thread 3
Done. Thread 3
Tutto il lavoro è essere uno sullo stesso nuovo thread in ordine sequenziale, che non è quello che mi aspettavo.
Presumo che mi manchi qualcosa, ma non riesco a capire cosa.
Grazie per questo. Non solo stai chiarendo cosa sto facendo male, ma penso anche che quello che dici riguardo l'intenzione di Rx ha molto senso. –
La risposta sopra sembra essere superata, il metodo Do non è più disponibile su Enumerable. – VivekDev
Perché il metodo Do funzioni, è necessario installare System.Interactive pacchetto nuget – VivekDev