Аналог Threading.Tasks в расширениях Rx в .NET 3.5?

Можно ли использовать Reactive Extensions (Rx) для создания приложений в .NET 3.5, которые выполняют распараллеливание, или это каким-то образом ограничено? Я скачал Rx отсюда http://www.microsoft.com/download/en/confirmation.aspx?id=26649, и после создания простого проекта со ссылками на реактивные сборки мне не удалось найти никаких классов, соответствующих задачам в .NET 4.0. Я пытаюсь найти классы для «Задачи», но, увы, не могу их найти. Я делаю что-то неправильно?


person Blablablaster    schedule 31.07.2011    source источник


Ответы (6)


Возможно, вам помогут образцы из rx wiki.

Самая простая фоновая задача:

var o = Observable.Start
(
    () => 
    { 
        Console.WriteLine("Calculating..."); 
        Thread.Sleep(3000); 
        Console.WriteLine("Done."); 
    }
);

o.First();   // subscribe and wait for completion of background operation

Но вы также можете посмотреть примеры forkjoin.

person alun    schedule 31.07.2011

Как некоторые здесь упоминали, вы можете найти System.Threading.dll в старой установке Rx.

Для упрощения интеграции я сделал из него nuget (под названием TaskParallelLibrary).

Вы можете получить его из http://nuget.org/packages/TaskParallelLibrary.

person Omer Mor    schedule 27.04.2012

Насколько мне известно, последняя версия реактивных расширений, включающая "обратно перенесенная автономная DLL с именем System.Threading.dll "- это Reactive Extensions (Rx) v1.0.2856.0 от 11.02.2011 (в Rx_Net35.msi).

(На самом деле я получил его как Rx_Net35.v1.0.2856.0.msi, загруженный в мае, я думаю, с CodePlex; больше не могу найти ... он установлен как C:\Program Files (x86)\Microsoft Cloud Programmability\Reactive Extensions\v1.0.2856.0\Net35\System.Threading.dll в моей 64-битной системе.)

person user423430    schedule 12.10.2011
comment
Посетите microsoft.com/en-us/download/details. aspx? id = 28568 для более позднего Rx SDK. Ссылка на страницу загрузки Rx по адресу msdn.microsoft.com/en-us/data/gg577610 - person CAD bloke; 09.07.2014
comment
Скачал больше не на microsoft.com :( - person Rowland Shaw; 14.09.2016

System.Threading, сборка для TPL, которая раньше была включена в выпуски Rx, но больше не включена.

Возможно, вы сможете найти его в более старых версиях.

При этом IObservable<T> аналогичен Task<T> с тем отличием, что Task<T> может иметь только 1 результат, а IObservable<T> - это поток из 0 или более результатов.

person Scott Weinstein    schedule 31.07.2011

Rx в .NET 3.5 не может использовать задачи, он использует пул потоков .NET 3.5, однако, как говорит Скотт, IObservable работает как Task, когда IObservable состоит из одного элемента.

person Ana Betts    schedule 31.07.2011

Пожалуйста, поправьте меня, если я где-то ошибаюсь.

Наблюдатели и наблюдатели в основном связаны с задачей - Наблюдать (ждать данных) и Подписка (чтобы наблюдатели получали данные, которые отправляются).

Observable предоставляет два оператора для повышения производительности двух вышеуказанных задач.

1). Observable.ObserveOn - асинхронно уведомляет наблюдателя по указанному расписанию. Задача может быть выполнена лучше с помощью Schedular, где он принимает аргумент либо

  • Scheduler.CurrentThread (наблюдать за текущим запущенным потоком)
  • Scheduler.NewThread (наблюдать каждый раз в новом потоке)
  • Scheduler.TaskPool (Понаблюдайте за использованием механизма TaskPool, я думаю, вам может быть интересно.)
  • Scheduler.ThreadPool (обратите внимание на механизм ThreadPool)

то же самое и со вторым ....

2). Observable.SubscribeOn - Асинхронная подписка - отписывать наблюдателей от указанных планировщиков.

Он также имеет те же параметры, что и выше, для планирования подписки.

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

person Jsinh    schedule 02.08.2011