reactive extensions v2.0

17
Reactive Extensions v 2.0 (+ Silverlight 5) @neuecc 2012/3/31 #slintky

Upload: yoshifumi-kawai

Post on 15-Jan-2015

2.243 views

Category:

Technology


6 download

DESCRIPTION

#slintky

TRANSCRIPT

Page 1: Reactive Extensions v2.0

Reactive Extensions v 2.0

(+ Silverlight 5)

@neuecc

2012/3/31 #slintky

Page 2: Reactive Extensions v2.0

Twitter => @neuecc

HN => neuecc

読むときは“のいえ”と読ませてます

サイトのドメイン(特に意味はない)を繋いだだけで、識別子になればそれだけでいいと思って発音考えてなかったので割とアレ

Microsoft MVP for Visual C#(2011/4-)

明日、期限切れor更新の勧告が!

というわけで若干そわそわ中

Profile

Page 3: Reactive Extensions v2.0

http://neue.cc/

C#とかLINQ

配色がアレ

サイト

Page 4: Reactive Extensions v2.0

http://linqjs.codeplex.com/

LINQのJavaScript移植

linq.js

Page 5: Reactive Extensions v2.0

http://reactiveproperty.codeplex.com/

Rxスタイルのバインディング補助ライブラリ

.NET4/SL5/SL5/WP7.1 対応

ReactiveProperty

Page 6: Reactive Extensions v2.0

http://reactiveoauth.codeplex.com/

Rxを使った非同期系OAuthライブラリ

.NET4/SL5/SL5/WP7.1 対応

ReactiveOAuth

Page 7: Reactive Extensions v2.0

What is Rx?

Page 8: Reactive Extensions v2.0

LINQ to Events

LINQ to Asynchronous

Page 9: Reactive Extensions v2.0

Demo

Page 10: Reactive Extensions v2.0

History

Rx in DevLabs

(2009/11/18)

Rx v1.0

(2011/1/21) Rx v2.0 Beta

(2011/1/21)

RxJS 2.0 Beta

(2011/12/30)

Phone.Reactive

RxJS v1.0

(2010/3/18)

Rx Experimental

in BCL???

(Future)

mono-reactive

Page 11: Reactive Extensions v2.0

準標準、的なライブラリ

Microsoftが開発、配布しているものだけど標準ライブラリではない

将来的に標準入りするかはまだ分からない

.NET3.5,4/SL3,4,5/WP7/WinRT/JavaScript 対応

Portable Library対応

※ただしRx v2.0は.NET4.5/SL5/WinRT/WP7.1のみ

Rx v1.0 ExperimentalはRx v2.0 Betaに吸収された

SilverightではRx v2.0 BetaはSL5のみ利用可

位置付け

Page 12: Reactive Extensions v2.0

Demo

Page 13: Reactive Extensions v2.0

Rxは一つの値も複数の値も同じに扱ってしまう

利点でもあり欠点でもある

SingleValue + Asynchronous

// Synchronous SingleValue var x = GetValue(); // Asynchronous SingleValue(C# 5.0) var x = await GetValueAsync(); // Asynchronous SingleValue(C# 4.0) GetValueAsync.ContinueWith(x => /* Action */); // TPL // Asynchronous Single or MultiValue(C# 4.0) GetValueAsync.Subscribe(x => /* Action */); // Rx

Page 14: Reactive Extensions v2.0

非同期におけるMultiValueの元はイベント(例えばテキストチェンジ)だったりタイマーだったり

MultiValue + Asynchronous

// Synchronous MultiValue Enumerable.Range(1, 10) .Select(_ => WebRequest.Create().DownloadString()) .ForEach(s => { // Action }); // Asynchronous MultiValue Observable.Interval(TimeSpan.FromSeconds(1)) .Select(_ => WebRequest.Create().DownloadStringAsync()) .Subscribe(s => { // Action });

Page 15: Reactive Extensions v2.0

Demo

Page 16: Reactive Extensions v2.0

例外処理、Retry処理、Timeout処理などRxの持つパワーは非常に強力

C# 5.0と合わせるなら一時的にTask->Rx変換して、それをawaitするなどで利用可能

但しRetry系はObservable.DeferやFromAsyncを被せておかないと悲惨なことに……!

FromAsyncはRx v2.0で初お目見え、Taskとの連携用

Power of Rx

var res = await Observable.FromAsync(() => WebRequest.Create().GetResponseAsync()) .Retry();

Page 17: Reactive Extensions v2.0

Reactive Extensions

http://msdn.microsoft.com/en-us/devlabs/gg577609

NuGetでRx v2.0を落とすときは-Preをつける

Install-Package Rx-Main –Pre

RxJSの各種ライブラリバインディング

https://github.com/Reactive-Extensions

本体はDownload CenterかNuGetで

@ITで連載やってます(絶賛原稿遅延中)

http://www.atmarkit.co.jp/fdotnet/introrx/index/index.

html

link, linq, lync