[ANN] Официальный релиз Rx .NET
От: z00n  
Дата: 30.06.11 12:57
Оценка: 95 (11)
http://channel9.msdn.com/Blogs/Charles/Announcing-the-Official-Release-of-Rx
Re: [ANN] Официальный релиз Rx .NET
От: Аноним  
Дата: 01.07.11 05:49
Оценка: -2
Здравствуйте, z00n, Вы писали:
Z>http://channel9.msdn.com/Blogs/Charles/Announcing-the-Official-Release-of-Rx

Наблюдаю за развитием Rx уже давно, но никак не могу для себя определить где и как она может мне сгодиться и чем она лучше стандартных средств языка?
Re[2]: [ANN] Официальный релиз Rx .NET
От: MxMsk Португалия  
Дата: 01.07.11 07:48
Оценка: +2
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, z00n, Вы писали:

Z>>http://channel9.msdn.com/Blogs/Charles/Announcing-the-Official-Release-of-Rx
А>Наблюдаю за развитием Rx уже давно, но никак не могу для себя определить где и как она может мне сгодиться и чем она лучше стандартных средств языка?
А стандартных средств и нет. Вернее их всегда мало, и нужны какие-нибудь "костыли" типа AsyncOperation, AsyncEnumerator или т.п. Rx приходит на замену ублюдочному IAsyncResult, и это радует. Мы недавно закончили переход на Rx в своем проекте. Должен отметить, что все без исключения места, связанные с асинхронными запросами и обработкой данных, стали гораздо читабельнее, а возможность комбинации запросов (вставки одного Observable в другой) так совсем прелесть. Rx также, как Linq в свое время, провоцирует на пересмотр, используемых ранее подходов в лучшую сторону.
Re[2]: [ANN] Официальный релиз Rx .NET
От: a_vzhik Россия  
Дата: 01.07.11 10:45
Оценка: 37 (3)
Здравствуйте, Аноним, Вы писали:

А>Наблюдаю за развитием Rx уже давно, но никак не могу для себя определить где и как она может мне сгодиться и чем она лучше стандартных средств языка?


Главное преимущество Rx в том, что она позволяет организовать понятный и логичный поток данных. Отчетливо можно проследить условия возникновения и уничтожения вычислительного процесса, переключения между потоками и при этом, в большинстве сценариев, совершенно не нужно думать об особенностях синхронизации (блокировки и ожидание).

Вот, например, простенькая реализация отображения содержимого последнего созданного файла на диске С. Предполагается, что этот код запускается в потоке представления (например, конструктор модели представления).

var scheduler = new SynchronizationContextScheduler(SynchronizationContext.Current);

var watcher = new FileSystemWatcher("c:\\")
        {
            IncludeSubdirectories = true,
            EnableRaisingEvents = true,
        };

// Представление файла в виде обозреваемой коллекции байт. 
Func<string, IObservable<byte[]>> observableFile = 
    filePath => Observable
        .Return(filePath, scheduler) 
        .Do(_ => this.IsLoading = true)
        .SelectMany(path =>  new FileStream(path, FileMode.Open).AsyncRead(2>>16))
        .ObserveOn(scheduler)
        .Finally(() => this.IsLoading = false);

Observable
    .FromEvent<FileSystemEventArgs>(watcher, "Created")
    .Do(e => scheduler.Schedule(this.Document.Clear())) 
    .Select(e => observableFile(e.EventArgs.FullPath))
    .Switch()
    .ObserveOn(scheduler)
    .Subscribe(
        bytes => this.Document.Add(bytes),
        error => this.HandleException(error));


В случае реализации средствами .NET — весь этот код будет размазан по одному, а то и нескольким файлам. Например, чтобы отписаться от события, в классе нужно будет заводить поле класса _watcher и метод обработки события. А организация асинхронного чтения вообще уведет в код, оперирующий обертками над IAsyncResult, а это сомнительное удовольсвие. Безусловно, пример несколько надуман, но при должном усердии подход, применяемый в Rx очень хорош. MxMsk уже сказал, что в нашем проекте все асинхронные задачи переведены на Rx (с полноценными отменами, прерываниями, разветвлениями и адекватной реакцией UI).
Re[3]: [ANN] Официальный релиз Rx .NET
От: Jack128  
Дата: 01.07.11 17:44
Оценка:
Здравствуйте, a_vzhik, Вы писали:

_>Здравствуйте, Аноним, Вы писали:


А>>Наблюдаю за развитием Rx уже давно, но никак не могу для себя определить где и как она может мне сгодиться и чем она лучше стандартных средств языка?


_>Вот, например, простенькая реализация отображения содержимого последнего созданного файла на диске С. Предполагается, что этот код запускается в потоке представления (например, конструктор модели представления).



_>// Представление файла в виде обозреваемой коллекции байт.

_>Func<string, IObservable<byte[]>> observableFile =
_> filePath => Observable
_> .Return(filePath, scheduler)
_> .Do(_ => this.IsLoading = true)
_> .SelectMany(path => new FileStream(path, FileMode.Open).AsyncRead(2>>16))
_> .ObserveOn(scheduler)
_> .Finally(() => this.IsLoading = false);


В выделенном утечки ресурсов нету?? Dispose() не мешало бы сделать (вроде в Rx есть что то типа Observable.Using() )
Re[3]: [ANN] Официальный релиз Rx .NET
От: _FRED_ Черногория
Дата: 01.07.11 18:11
Оценка:
Здравствуйте, MxMsk, Вы писали:

Z>>>http://channel9.msdn.com/Blogs/Charles/Announcing-the-Official-Release-of-Rx

А>>Наблюдаю за развитием Rx уже давно, но никак не могу для себя определить где и как она может мне сгодиться и чем она лучше стандартных средств языка?
MM>А стандартных средств и нет.

С багами встречаться не приходилось? В релизе их много?
Help will always be given at Hogwarts to those who ask for it.
Re[3]: [ANN] Официальный релиз Rx .NET
От: Аноним  
Дата: 02.07.11 04:51
Оценка:
Здравствуйте, a_vzhik, Вы писали:

_>В случае реализации средствами .NET — весь этот код будет размазан по одному, а то и нескольким файлам. Например, чтобы отписаться от события, в классе нужно будет заводить поле класса _watcher и метод обработки события. А организация асинхронного чтения вообще уведет в код, оперирующий обертками над IAsyncResult, а это сомнительное удовольсвие. Безусловно, пример несколько надуман, но при должном усердии подход, применяемый в Rx очень хорош. MxMsk уже сказал, что в нашем проекте все асинхронные задачи переведены на Rx (с полноценными отменами, прерываниями, разветвлениями и адекватной реакцией UI).


Скажу свои впечатления от кода, человека не сведущего в Rx — сложно много операторов с неясным смыслом — т.е. если у меня болит зуб — надо защимить палец дверью и теперь зуб не болит, но зато болит палец!!! )
Так вот мне представляется ситуация с Rx схожа вышеописанной ситуацией.
Когда-то давно пытался "войти" в Rx — на тот момент сколь-нибудь доходчивой информации не было — а как с этим сейчас?
Нужно ли сначала изучить километры справки, чтоб что-то начать на Rx?
Re[4]: [ANN] Официальный релиз Rx .NET
От: MxMsk Португалия  
Дата: 02.07.11 06:34
Оценка:
Здравствуйте, Jack128, Вы писали:

J>В выделенном утечки ресурсов нету?? Dispose() не мешало бы сделать (вроде в Rx есть что то типа Observable.Using() )

Да, здесь стоит добавить Observable.Using. Хотя возможно, что AsyncRead сам заботится о ресурсе. Кстати, в релизе этого метода нет. Ранее в Rx была сборка ClientProfile с методами чтения и записи потоков через Observable. В релизе я этой сборки не увидел, как не увидил и аналогов. Может у кого-нибудь есть информация, отчего так?
Re[5]: [ANN] Официальный релиз Rx .NET
От: Sinix  
Дата: 02.07.11 06:56
Оценка:
Здравствуйте, MxMsk, Вы писали:

MM> Может у кого-нибудь есть информация, отчего так?

Так всё, связанное с async-ом и с Ix пока в экспериментальных сборках, нет?

Кстати, никто не видел хорошей, качественной серии статей по сабжу? Разумеется, кроме официального блога и видео
Re[4]: [ANN] Официальный релиз Rx .NET
От: MxMsk Португалия  
Дата: 02.07.11 07:06
Оценка: 29 (2)
Здравствуйте, _FRED_, Вы писали:

_FR>С багами встречаться не приходилось? В релизе их много?

Один раз я нарвался на dead lock, но это только помогло придумать другую, более кошерную реализацию — и с меньшим количеством кода и без side effect-ов. Конечно, мы не все методы Observable используем. В основном Select и SelectMany, параллельные запросы через When, накопление при помощи Buffer, вызовы UI через ObserveOn, аналоги using и finally. Помимо этого, встречается прерывание одной последовательности другой, продуцирование значений от событий и типичных асинхронных вызовов. Всё это работает без сбоев уже несколько месяцев. Ни разу не было багов, связанных с Rx.
Re[4]: [ANN] Официальный релиз Rx .NET
От: MxMsk Португалия  
Дата: 02.07.11 07:11
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Скажу свои впечатления от кода, человека не сведущего в Rx — сложно много операторов с неясным смыслом — т.е. если у меня болит зуб — надо защимить палец дверью и теперь зуб не болит, но зато болит палец!!! )

А>Так вот мне представляется ситуация с Rx схожа вышеописанной ситуацией.
А>Когда-то давно пытался "войти" в Rx — на тот момент сколь-нибудь доходчивой информации не было — а как с этим сейчас?
А>Нужно ли сначала изучить километры справки, чтоб что-то начать на Rx?
Отсутствие внятной справки — это огромная ложка дегтя в Rx Соглашусь с тем, что смысл некоторых методов действительно не ясен и иногда пишешь наобум . Например, Materialize. Тем не менее, потихоньку Rx добавляется в MSDN. Если правда, что она станет частью .Net Framework, то потихонечку во всем разберемся
Re[6]: [ANN] Официальный релиз Rx .NET
От: MxMsk Португалия  
Дата: 02.07.11 07:14
Оценка:
Здравствуйте, Sinix, Вы писали:

MM>> Может у кого-нибудь есть информация, отчего так?

S>Так всё, связанное с async-ом и с Ix пока в экспериментальных сборках, нет?
AsyncRead — простой метод расширения, ничего особенного он не делает и с async-ом имеет общего только название В нем использовался метод Observable.Iterate, который в релизе пропал или был заменен каким-то аналогом.
Re[4]: [ANN] Официальный релиз Rx .NET
От: Саша Россия  
Дата: 03.07.11 07:25
Оценка: 2 (1) +1
Здравствуйте, Jack128, Вы писали:
J>В выделенном утечки ресурсов нету?? Dispose() не мешало бы сделать (вроде в Rx есть что то типа Observable.Using() )

Конечно утечка есть, спасибо. Создание файла нужно обернуть в Observable.Using().

Здравствуйте, Аноним, Вы писали:
А>Скажу свои впечатления от кода, человека не сведущего в Rx — сложно много операторов с неясным смыслом — т.е. если у меня болит зуб — надо защимить палец дверью и теперь зуб не болит, но зато болит палец!!! )
А>Так вот мне представляется ситуация с Rx схожа вышеописанной ситуацией.
А>Когда-то давно пытался "войти" в Rx — на тот момент сколь-нибудь доходчивой информации не было — а как с этим сейчас?
А>Нужно ли сначала изучить километры справки, чтоб что-то начать на Rx?

Вы знаете, это обычная ситуация — смотреть на новый язык/фреймворк/парадигму и тихо удивляться "зачем так сложно и непонятно?".
Конкретно мне для входа в Rx понадобилось понять концепцию Observable как вывернутого Enumerable (это описывается почти во всех статьях), внимательно прочесть брошюру с девятью лабораторными работами "DEVHOL202 – Curing the asynchronous blues with the Reactive Extensions for .NET" (на 40 страниц с неприлично большим количеством картинок и кода) и бегло пробежаться по документу "Rx Design Guidelines". И, конечно, заставить себя начать использовать Rx. Например, я написал порядка 15 реализаций асинхронного чтения файла в стиле Rx, пока не понял как это нужно делать правильно.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.