Observables vs Tasks - предпочтительная реализация? - PullRequest
5 голосов
/ 09 февраля 2012

Я просто хочу получить данные асинхронно, и после извлечения данных показать их в пользовательском интерфейсе (Winforms).

Используя .net 4.0, я могу реализовать это двумя способами (я знаю там)больше, но я использую эти два):

    var task = Task.Factory.StartNew(() => RetrieveData());
    task.ContinueWith(x => SetDataInUi(x.Result), TaskScheduler.FromCurrentSynchronizationContext());

ИЛИ

var obs = Observable.Start(() => RetrieveData());
obs.ObserveOn(SynchronizationContext.Current).Subscribe(x => SetDataInUi(x));

Насколько я понимаю, они оба будут делать одно и то же.Есть ли причина выбирать один над другим?

Ответы [ 2 ]

5 голосов
/ 09 февраля 2012

Если вы просто хотите запросить данные откуда-то и распечатать их на экране, я бы предпочел первое решение.

Второе тоже работает, но RX был разработан, чтобы помочь вам с потоками данных.И мы все согласны с тем, что не стоит использовать сложное решение, когда вы можете использовать простое:)

2 голосов
/ 09 февраля 2012

Короткий ответ - нет, между этими двумя реализациями не должно быть существенного различия.

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

API Task позволяет избежать непосредственного использования потоков и вместо этого работать с отдельными задачами, которые вы хотите выполнить.

API Reactive обеспечивает эффективный способ передачи данных между различными операциями.

В этом случае ваша проблема заключается в обеих сферах. Вы работаете с небольшой задачей, которая не стоит явных потоков, и вы направляете поток данных с вашим результатом. Однако предыдущее определение является более полным описанием, поэтому, вероятно, вам следует использовать это решение.

Использует ли какой-либо из ваших существующих кодов любое из решений? Соответствие тому, что вы делаете в другом месте, помогает улучшить читаемость и отвергает это соображение.

Также обратите внимание, что иногда при сравнении API вы должны учитывать зависимости, но не в этом случае, но это полезно иметь в виду в целом.

...