System.Reactive выбор между Scheduler.Default и TaskPoolScheduler.Default - PullRequest
1 голос
/ 11 марта 2020

Я испытываю значительные трудности с выбором между Scheduler.Default и TaskPoolScheduler.Default.

Я видел, что это говорит о том, что TaskPoolScheduler более эффективен / оптимизирован и, безусловно, имеет преимущество в том, что он более явный / конкретный; однако, это не помогает мне понять реальные различия, учитывая, что функционально они, кажется, делают то же самое.

Когда Scheduler.Default предпочтительнее TaskPoolScheduler.Default и наоборот?

1 Ответ

2 голосов
/ 11 марта 2020

Scheduler.Default совпадает с DefaultScheduler.Instance.

Как DefaultScheduler обрабатывает гром? DefaultScheduler расположен поверх уровня абстракции платформы, который планирует работу в зависимости от того, на какой системе он работает.

Раньше это была сборка System.Reactive.PlatformServices.dll, которая отличалась бы в зависимости от платформы, но для 4.x это просто пустая сборка фасада, чтобы оставаться совместимой с 3.x, с реализацией, перенесенной на System.Reactive.dll.

Для DefaultScheduler:

  • На данный момент для планирования немедленной работы используется ThreadPool.
  • Для периодов c событий (SchedulePeriodic ) используется System.Threading.Timer.
  • Для работы, которая выполняется максимально быстро, используется новый поток.

Подробная информация о том, какая служба платформы выбрана, содержится в EnlightenmentProvider .

Возможно, вы можете использовать DefaultScheduler, если у вас есть длительные вычисления или периоды c, где TimeSpan очень маленький, или ноль, хотя EventLoopScheduler может быть лучше.

Предпочитаю TaskPoolScheduler, когда это возможно. Это легкая реализация, предназначенная для коротких вычислений.

...