.NET Reactive Framework を Enjoy! してみた
最初にする事
http://themechanicalbride.blogspot.com/2009/07/introducing-rx-linq-to-events.html の下のほうにURLが出てるんだが
http://evain.net/blog/articles/2009/07/30/rebasing-system-reactive-to-the-net-clr を良く読んで Silverlight 用のランタイム向けになっている System.Reactive.dll にパッチをして通常のCLRで使えるようにする。
class SalesEventer
{
public event EventHandler<SalesEventArgs> Selled;
public void RaiseSelled( string name, int amount )
{
Selled( this, new SalesEventArgs() {name = name, amount = amount});
}
}
internal class SalesEventArgs : EventArgs
{
public string name;
public int amount;
}
なんかが売れたら売れたよイベントを上げてくれるSalesEventerをこう作った。
class Program
{
static void Main(string[] args)
{
SalesEventer eventer = new SalesEventer();
using (Observable.FromEvent<SalesEventArgs>(eventer, "Selled")
.Where(
salesEvent =>
salesEvent.EventArgs.name == "ピザ" && salesEvent.EventArgs.amount >= 3)
.Subscribe( s => Console.WriteLine("ピザ {0}枚とか食いすぎだろ", s.EventArgs.amount)))
{
foreach (int i in Enumerable.Range(1, 5))
{
eventer.RaiseSelled("ピザ", i);
}
}
Console.ReadLine();
}
}
素晴らしい、イベントをフィルタリングしながらハンドルするのがこんなに簡単にだ。
んで、フィルタリングするだけなら from ... select のLINQクエリ式も書けるので (from ... select ... ).Subscribe( Action ) で書いても良い。
ちなみに using で使ってるのはSubscribeで IDisposable が帰ってくるから、そして Disposeするとイベントのハンドリングは解除されるって事で IDisposable をちゃんと扱えばイベントのハンドリング制御も全く簡単だ。
System.Linq.Observable にはなんだか色々と面白そうな物が転がってるのでみんなも試してみてね!
投稿日時 : 2009年8月18日 20:25
Tweet

コメントを追加
# re: .NET Reactive Framework を Enjoy! してみた 2009年8月19日 5:46 nsharp
ドキュメントがほしいですね。(´・ω・`)ToObservableすればよろしということで、長年のなぞ、LINQにForEachがない理由が一気に解けたような希ガス。(大げさ)
# re: .NET Reactive Framework を Enjoy! してみた 2009年9月24日 14:13 菊池
.NET Reactive Framework メソッド探訪第一回:FromEventhttp://neue.cc/2009/09/04_197.html
って訳で中身の解説をしてくれているのでLink貼り
# W???P???F &raquo; Post Topic &raquo; [C#][Silverlight] Reactive Framework (Rx) ?????????????????? 2009年10月27日 1:48
W???P???F » Post Topic » [C#][Silverlight] Reactive Framework (Rx) ??????????????????