В чем разница между использованием Select> Defer + Start> Merge в Observable и пользовательским планировщиком задач? - PullRequest
0 голосов
/ 17 сентября 2018

При попытке ограничить число степеней параллелизма, с которыми обрабатывается Observable, я обнаружил два метода:

var optimized =
    observable
        .OfType<IReadableGeometry>()
        .Where(g => !(g is IOptimizedGeometry))
        .Select(g => Observable.Defer(() => Observable.Start(g.Optimize)))
        .Merge(10);

То есть сопоставление каждого элемента в последовательности с Observableи затем вызов Merge() с максимальным аргументом параллелизма.

Или:

var scheduler = new LimitedConcurrencyLevelTaskScheduler(10);
var optimized =
    observable
        .OfType<IReadableGeometry>()
        .Where(g => !(g is IOptimizedGeometry))
        .ObserveOn(scheduler)
        .Select(g => g.Optimize());

Они эквивалентны или есть разница в том, как они работают / ведут себя?

...