BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース .NET 4.5用のReactive Extensions

.NET 4.5用のReactive Extensions

原文(投稿日:2011/10/31)へのリンク

.NET 4.5の新しい機能は、 Reactive Extensionsのようなバンドライブラリの意味を再吟味できる機会となる。 Bart De Smet 氏は、Rxの実験的なリリースに何が含まれているのかについて語った。またJavaScript と C++向けのRxについても述べている。

まずはRxの ExceptionDispatchInfoのサポートである。.NETのこれまでのバージョンでは、例外は、それが投げられたのと同じスレッドによってキャッチされることを期待していた。それを他のスレッドに移す必要のあったライブラリは、それらをフィールドとして、マーシャルされたコールバックに渡し、その後それらは一般的な例外でラップされた。この新しい例外は、その下の本当のエラーを見るためには、ラップをとかなければならないことになる。

ExceptionDispatchInfo.Captureメソッドは例外をキャッチするのに使われている。それは、 ExceptionDispatchInfo.Throwメソッドを使って正しいスレッドに再スローされる。スタックトレースには、新しい場所と元の場所の両方からのフレームが含まれており、両方を区別するために「例外が投げられた前の場所からのスタックトレースの最後」という文が付いている。

Reactive Extensionsが作成された時、Task<T>への依存状態を取り込むことができなかった。 単にTask Parallel Libraryが未だリリースされていなかったわけで、今日でさえ、 Silverlightのように多くのプラットフォームが未だTPLをサポートしていない。回避策として、Rxライブラリは、その代わりに、 .NETに元々ある非同期パターンの上に作られた。そしてobservableはObservable.FromAsyncPatternメソッドを介して作られた。

C# 5 と VB 11でのasync/await サポートがtaskの上に作成されたので、様々なプラットフォームが Task Parallel Libraryを完全にサポートするつもりになっている。このお蔭でRxプロジェクトは、遂にobservableをTask<T>から直接作ることができる。

taskとobservable間の変換に加えて、 Reactive Extensionsはまた、直接 awaitキーワードをサポートする予定である。これはIObservable シーケンスの最後のアイテムを返すだろう。もしシーケンス中の全アイテムが欲しければ、 ToListを使って IObservable<T> から IObservable<List<T>> に変換することになる。

他の変更としては、 Average やForEachのようなブロック操作の差し替えである。例えば、新しい ForEachAsyncは待つことができるTaskを返す。

JavaScript版のライブラリであるRxJSは、Rxの現行の製品ビルドをベースにした新バージョンになる予定だ。スケジュールはわかってないが、磨きをかけている段階にあるとのことである。 Reactive Extensionsチームはまた、ネイティブ開発者を巻き込んで、暫定的にRxCと言われているC++バージョンも開発している。

この記事に星をつける

おすすめ度
スタイル

BT