Threading.Tasks аналог в расширениях Rx в .NET 3.5? - PullRequest
3 голосов
/ 31 июля 2011

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

Ответы [ 6 ]

5 голосов
/ 27 апреля 2012

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

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

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

4 голосов
/ 13 октября 2011

Насколько мне известно, последняя версия Reactive Extensions, включающая " автономную библиотеку с обратным портированием с именем System.Threading.dll ", равна Reactive Extensions (Rx) v1.0.2856. .0 выпущено 2/11/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-битной системе .)

3 голосов
/ 01 августа 2011

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

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

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

1 голос
/ 02 августа 2011

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

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

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

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

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

то же самое идетдля второго ....

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

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

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

1 голос
/ 01 августа 2011

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

1 голос
/ 31 июля 2011

Может быть, сэмплы из 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

Но вы также можете посмотреть напримеры разветвления.

...