xin9le.net

Microsoft の製品/技術が大好きな Microsoft MVP な管理人の技術ブログです。

Rx入門 (1) - はじめに

近年のアプリケーションの高度化は凄まじいものがあります。ユーザーはその進化にどんどん慣れていき、より新しいもの、かっこいいもの、快適なものを求めるようになります。特に "快適" というのは非常に重要な要素で、使っていてストレスの溜まるようなアプリケーションはどんどん嫌われ、淘汰されていきます。昨今ではTwitterなどのSNSの影響もあり、口コミで良いもの/悪いものの差が広がりやすい環境にあります。

みなさんも経験があるかと思いますが、ほんの1~2秒フリーズしているように感じるだけでもムッとするものです。処理が長くて待たせる必要があるのならば、進捗を表示するなどの細かい工夫が必要です。このように、ユーザーに対してよりよいUX (特に快適さ) を提供するには、アプリケーションの非同期処理が欠かせません。

しかし、非同期処理はUIに同期的な処理に比べてとても面倒なだけでなく、同期処理にはない非同期処理特有の問題が発生する可能性もあります。何よりデバッグがしづらいため、バグが出ても原因の特定に時間がかかるなどの問題もあります。ユーザーの要求は当然のことではあるものの、その実装がどれほど骨の折れるものか...と考えてしまいます。

また、時間に関する処理も同じく非常に手間です。典型的なタイマーはまだ簡単な方ですが、例えば「頻繁に発生するイベントのうち、X秒の間に発生した最後の1回だけを処理する」などと言ったことをしようとすると、途端に話がややこしくなります。

「もっと簡単に書ければ良いのに...」

このように感じることは多々あることでしょう。ここで登場するのがReactive Extensions (Rx) です。Rxは、非同期/イベント/時間に関する処理をLINQの形式で簡潔かつ宣言的に記述することができます。現在のところは.NET Frameworkの標準ライブラリではありませんが、将来的な搭載はほぼ間違いないですし、Windows Phoneではすでに利用可能です。勉強しておいて損はないので、ぜひRxの世界に足を踏み入れてみましょう!

Let's enjoy Rx together!!

補足

非同期処理についてのみ取り上げれば、.NET Frameworkの次期バージョンである.NET Framework 4.5 + C# 5.0では非同期メソッドが導入される予定 (TPL入門(21) - 非同期メソッドを参照) です。対してRxは、.NET Framework 3.5以降で利用可能です。

準備

Rxライブラリの準備については、@neueccさんが書いているRxの連載記事の第1回、Reactive Extensionsの概要と利用方法を参考にしてください。