Soumettre la recherche
Mettre en ligne
Rx入門
•
25 j'aime
•
27,738 vues
Takaaki Suzuki
Suivre
2012/02/11 - 2012/03/17 Hokuriku.NET C# -Rx入門- セッション資料
Lire moins
Lire la suite
Technologie
Sports
Signaler
Partager
Signaler
Partager
1 sur 33
Télécharger maintenant
Télécharger pour lire hors ligne
Recommandé
Marp Tutorial
Marp Tutorial
Rui Watanabe
何となく勉強した気分になれるパーサ入門
何となく勉強した気分になれるパーサ入門
masayoshi takahashi
イベント・ソーシングを知る
イベント・ソーシングを知る
Shuhei Fujita
Slurmのジョブスケジューリングと実装
Slurmのジョブスケジューリングと実装
Ryuichi Sakamoto
AWSではじめるMLOps
AWSではじめるMLOps
MariOhbuchi
こわくない Git
こわくない Git
Kota Saito
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織
Takafumi ONAKA
分散トレーシングAWS:X-Rayとの上手い付き合い方
分散トレーシングAWS:X-Rayとの上手い付き合い方
Recruit Lifestyle Co., Ltd.
Recommandé
Marp Tutorial
Marp Tutorial
Rui Watanabe
何となく勉強した気分になれるパーサ入門
何となく勉強した気分になれるパーサ入門
masayoshi takahashi
イベント・ソーシングを知る
イベント・ソーシングを知る
Shuhei Fujita
Slurmのジョブスケジューリングと実装
Slurmのジョブスケジューリングと実装
Ryuichi Sakamoto
AWSではじめるMLOps
AWSではじめるMLOps
MariOhbuchi
こわくない Git
こわくない Git
Kota Saito
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織
Takafumi ONAKA
分散トレーシングAWS:X-Rayとの上手い付き合い方
分散トレーシングAWS:X-Rayとの上手い付き合い方
Recruit Lifestyle Co., Ltd.
Glue DataBrewでデータをクリーニング、加工してみよう
Glue DataBrewでデータをクリーニング、加工してみよう
takeshi suto
ストリーム処理を支えるキューイングシステムの選び方
ストリーム処理を支えるキューイングシステムの選び方
Yoshiyasu SAEKI
Amazon Athena 初心者向けハンズオン
Amazon Athena 初心者向けハンズオン
Amazon Web Services Japan
PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門
泰 増田
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
NTT DATA Technology & Innovation
AVX-512(フォーマット)詳解
AVX-512(フォーマット)詳解
MITSUNARI Shigeo
JavaでWebサービスを作り続けるための戦略と戦術 JJUG-CCC-2018-Spring-g1
JavaでWebサービスを作り続けるための戦略と戦術 JJUG-CCC-2018-Spring-g1
Y Watanabe
噛み砕いてKafka Streams #kafkajp
噛み砕いてKafka Streams #kafkajp
Yahoo!デベロッパーネットワーク
SpringBootTest入門
SpringBootTest入門
Yahoo!デベロッパーネットワーク
グラフデータベース入門
グラフデータベース入門
Masaya Dake
AWS導入から3年 AWSマルチアカウント管理で変わらなかったこと変えていったこと
AWS導入から3年 AWSマルチアカウント管理で変わらなかったこと変えていったこと
Takayuki Ishikawa
Apache Avro vs Protocol Buffers
Apache Avro vs Protocol Buffers
Seiya Mizuno
脱RESTful API設計の提案
脱RESTful API設計の提案
樽八 仲川
PowerApps JSONの使い道
PowerApps JSONの使い道
Nagao Hiroaki
メタプログラミングって何だろう
メタプログラミングって何だろう
Kota Mizushima
Amazon DynamoDB(初心者向け 超速マスター編)JAWSUG大阪
Amazon DynamoDB(初心者向け 超速マスター編)JAWSUG大阪
崇之 清水
Amazon SageMakerでカスタムコンテナを使った学習
Amazon SageMakerでカスタムコンテナを使った学習
西岡 賢一郎
Java8でRDBMS作ったよ
Java8でRDBMS作ったよ
なおき きしだ
Spring Bootで変わる Javaアプリ開発! #jsug
Spring Bootで変わる Javaアプリ開発! #jsug
Toshiaki Maki
とにかく分かりづらいTwelve-Factor Appの解説を試みる
とにかく分かりづらいTwelve-Factor Appの解説を試みる
Masatoshi Tada
2013 11-09 デスクトップ・アプリの価値を高めるモダン化
2013 11-09 デスクトップ・アプリの価値を高めるモダン化
Hiroyuki Mori
縁取りでアプリの文字を見やすくしよう
縁取りでアプリの文字を見やすくしよう
株式会社グラフィシア
Contenu connexe
Tendances
Glue DataBrewでデータをクリーニング、加工してみよう
Glue DataBrewでデータをクリーニング、加工してみよう
takeshi suto
ストリーム処理を支えるキューイングシステムの選び方
ストリーム処理を支えるキューイングシステムの選び方
Yoshiyasu SAEKI
Amazon Athena 初心者向けハンズオン
Amazon Athena 初心者向けハンズオン
Amazon Web Services Japan
PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門
泰 増田
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
NTT DATA Technology & Innovation
AVX-512(フォーマット)詳解
AVX-512(フォーマット)詳解
MITSUNARI Shigeo
JavaでWebサービスを作り続けるための戦略と戦術 JJUG-CCC-2018-Spring-g1
JavaでWebサービスを作り続けるための戦略と戦術 JJUG-CCC-2018-Spring-g1
Y Watanabe
噛み砕いてKafka Streams #kafkajp
噛み砕いてKafka Streams #kafkajp
Yahoo!デベロッパーネットワーク
SpringBootTest入門
SpringBootTest入門
Yahoo!デベロッパーネットワーク
グラフデータベース入門
グラフデータベース入門
Masaya Dake
AWS導入から3年 AWSマルチアカウント管理で変わらなかったこと変えていったこと
AWS導入から3年 AWSマルチアカウント管理で変わらなかったこと変えていったこと
Takayuki Ishikawa
Apache Avro vs Protocol Buffers
Apache Avro vs Protocol Buffers
Seiya Mizuno
脱RESTful API設計の提案
脱RESTful API設計の提案
樽八 仲川
PowerApps JSONの使い道
PowerApps JSONの使い道
Nagao Hiroaki
メタプログラミングって何だろう
メタプログラミングって何だろう
Kota Mizushima
Amazon DynamoDB(初心者向け 超速マスター編)JAWSUG大阪
Amazon DynamoDB(初心者向け 超速マスター編)JAWSUG大阪
崇之 清水
Amazon SageMakerでカスタムコンテナを使った学習
Amazon SageMakerでカスタムコンテナを使った学習
西岡 賢一郎
Java8でRDBMS作ったよ
Java8でRDBMS作ったよ
なおき きしだ
Spring Bootで変わる Javaアプリ開発! #jsug
Spring Bootで変わる Javaアプリ開発! #jsug
Toshiaki Maki
とにかく分かりづらいTwelve-Factor Appの解説を試みる
とにかく分かりづらいTwelve-Factor Appの解説を試みる
Masatoshi Tada
Tendances
(20)
Glue DataBrewでデータをクリーニング、加工してみよう
Glue DataBrewでデータをクリーニング、加工してみよう
ストリーム処理を支えるキューイングシステムの選び方
ストリーム処理を支えるキューイングシステムの選び方
Amazon Athena 初心者向けハンズオン
Amazon Athena 初心者向けハンズオン
PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
AVX-512(フォーマット)詳解
AVX-512(フォーマット)詳解
JavaでWebサービスを作り続けるための戦略と戦術 JJUG-CCC-2018-Spring-g1
JavaでWebサービスを作り続けるための戦略と戦術 JJUG-CCC-2018-Spring-g1
噛み砕いてKafka Streams #kafkajp
噛み砕いてKafka Streams #kafkajp
SpringBootTest入門
SpringBootTest入門
グラフデータベース入門
グラフデータベース入門
AWS導入から3年 AWSマルチアカウント管理で変わらなかったこと変えていったこと
AWS導入から3年 AWSマルチアカウント管理で変わらなかったこと変えていったこと
Apache Avro vs Protocol Buffers
Apache Avro vs Protocol Buffers
脱RESTful API設計の提案
脱RESTful API設計の提案
PowerApps JSONの使い道
PowerApps JSONの使い道
メタプログラミングって何だろう
メタプログラミングって何だろう
Amazon DynamoDB(初心者向け 超速マスター編)JAWSUG大阪
Amazon DynamoDB(初心者向け 超速マスター編)JAWSUG大阪
Amazon SageMakerでカスタムコンテナを使った学習
Amazon SageMakerでカスタムコンテナを使った学習
Java8でRDBMS作ったよ
Java8でRDBMS作ったよ
Spring Bootで変わる Javaアプリ開発! #jsug
Spring Bootで変わる Javaアプリ開発! #jsug
とにかく分かりづらいTwelve-Factor Appの解説を試みる
とにかく分かりづらいTwelve-Factor Appの解説を試みる
En vedette
2013 11-09 デスクトップ・アプリの価値を高めるモダン化
2013 11-09 デスクトップ・アプリの価値を高めるモダン化
Hiroyuki Mori
縁取りでアプリの文字を見やすくしよう
縁取りでアプリの文字を見やすくしよう
株式会社グラフィシア
難しいよね、コードレビュー
難しいよね、コードレビュー
Shinichi Takahashi
メトロスタイルってなに?
メトロスタイルってなに?
ShinichiAoyagi
Wpf・silverlightのアニメーションからwindowsストアアプリのアニメーションへ
Wpf・silverlightのアニメーションからwindowsストアアプリのアニメーションへ
Hiroyuki Mori
今更始める Win32 + DirectWrite #pronamaclrhsapporocpp
今更始める Win32 + DirectWrite #pronamaclrhsapporocpp
hiyohiyo
〜 デザイン脳×プログラミング脳 〜 デザイナーとプログラマーの72時間戦争
〜 デザイン脳×プログラミング脳 〜 デザイナーとプログラマーの72時間戦争
Mignon Style
コードレビュー用資料
コードレビュー用資料
Ayumu Itou
C#/WPFで作るデスクトップマスコット入門
C#/WPFで作るデスクトップマスコット入門
Fujikido
僕がやったXaml戦略
僕がやったXaml戦略
Hiroyuki Mori
Prism.Formsについて
Prism.Formsについて
一希 大田
Bluetoothでgo!
Bluetoothでgo!
Kouji Matsui
En vedette
(12)
2013 11-09 デスクトップ・アプリの価値を高めるモダン化
2013 11-09 デスクトップ・アプリの価値を高めるモダン化
縁取りでアプリの文字を見やすくしよう
縁取りでアプリの文字を見やすくしよう
難しいよね、コードレビュー
難しいよね、コードレビュー
メトロスタイルってなに?
メトロスタイルってなに?
Wpf・silverlightのアニメーションからwindowsストアアプリのアニメーションへ
Wpf・silverlightのアニメーションからwindowsストアアプリのアニメーションへ
今更始める Win32 + DirectWrite #pronamaclrhsapporocpp
今更始める Win32 + DirectWrite #pronamaclrhsapporocpp
〜 デザイン脳×プログラミング脳 〜 デザイナーとプログラマーの72時間戦争
〜 デザイン脳×プログラミング脳 〜 デザイナーとプログラマーの72時間戦争
コードレビュー用資料
コードレビュー用資料
C#/WPFで作るデスクトップマスコット入門
C#/WPFで作るデスクトップマスコット入門
僕がやったXaml戦略
僕がやったXaml戦略
Prism.Formsについて
Prism.Formsについて
Bluetoothでgo!
Bluetoothでgo!
Similaire à Rx入門
Rx Showcase
Rx Showcase
Takaaki Suzuki
Reactive Systems と Back Pressure
Reactive Systems と Back Pressure
Akihiro Ikezoe
サーバサイドエンジニアが 1年間まじめにSPAやってみた
サーバサイドエンジニアが 1年間まじめにSPAやってみた
Itaru Kitagawa
RxShowcase -for ignote & i-Jupiter-
RxShowcase -for ignote & i-Jupiter-
Takaaki Suzuki
RxSwift x Realm
RxSwift x Realm
Kosuke Usami
Reactive Extensions v2.0
Reactive Extensions v2.0
Yoshifumi Kawai
UniRx勉強会 reactive extensions inside(公開用)
UniRx勉強会 reactive extensions inside(公開用)
wilfrem
serverless
serverless
Akira Otsuka
Influxdb ver0.9.5#yjdsw3
Influxdb ver0.9.5#yjdsw3
Yahoo!デベロッパーネットワーク
リアクティブ・アーキテクチャ ~大規模サービスにおける必要性と課題〜 #devsumi
リアクティブ・アーキテクチャ ~大規模サービスにおける必要性と課題〜 #devsumi
Yuta Okamoto
LineairDBの紹介
LineairDBの紹介
Sho Nakazono
Rxjavaとoptionalで関数型androidしよう
Rxjavaとoptionalで関数型androidしよう
Fumihiko Shiroyama
Redux, Relay, HorizonあるいはElm
Redux, Relay, HorizonあるいはElm
chuck h
linq.js - Linq to Objects for JavaScript
linq.js - Linq to Objects for JavaScript
Yoshifumi Kawai
仮想通貨取引所 bitbank の IaC の導入と実践
仮想通貨取引所 bitbank の IaC の導入と実践
bitbank, Inc. Tokyo, Japan
ReactiveSignalR
ReactiveSignalR
Takaaki Suzuki
オブジェクト指向な人がRx swiftを試してみた
オブジェクト指向な人がRx swiftを試してみた
小林 弘明
Flowtype Introduction
Flowtype Introduction
Teppei Sato
トランザクションの並行処理制御
トランザクションの並行処理制御
Takashi Hoshino
RxSwift x APIKit
RxSwift x APIKit
Kosuke Usami
Similaire à Rx入門
(20)
Rx Showcase
Rx Showcase
Reactive Systems と Back Pressure
Reactive Systems と Back Pressure
サーバサイドエンジニアが 1年間まじめにSPAやってみた
サーバサイドエンジニアが 1年間まじめにSPAやってみた
RxShowcase -for ignote & i-Jupiter-
RxShowcase -for ignote & i-Jupiter-
RxSwift x Realm
RxSwift x Realm
Reactive Extensions v2.0
Reactive Extensions v2.0
UniRx勉強会 reactive extensions inside(公開用)
UniRx勉強会 reactive extensions inside(公開用)
serverless
serverless
Influxdb ver0.9.5#yjdsw3
Influxdb ver0.9.5#yjdsw3
リアクティブ・アーキテクチャ ~大規模サービスにおける必要性と課題〜 #devsumi
リアクティブ・アーキテクチャ ~大規模サービスにおける必要性と課題〜 #devsumi
LineairDBの紹介
LineairDBの紹介
Rxjavaとoptionalで関数型androidしよう
Rxjavaとoptionalで関数型androidしよう
Redux, Relay, HorizonあるいはElm
Redux, Relay, HorizonあるいはElm
linq.js - Linq to Objects for JavaScript
linq.js - Linq to Objects for JavaScript
仮想通貨取引所 bitbank の IaC の導入と実践
仮想通貨取引所 bitbank の IaC の導入と実践
ReactiveSignalR
ReactiveSignalR
オブジェクト指向な人がRx swiftを試してみた
オブジェクト指向な人がRx swiftを試してみた
Flowtype Introduction
Flowtype Introduction
トランザクションの並行処理制御
トランザクションの並行処理制御
RxSwift x APIKit
RxSwift x APIKit
Plus de Takaaki Suzuki
5 分で学ぶ Interpolated String Handler
5 分で学ぶ Interpolated String Handler
Takaaki Suzuki
C# における Redis 徹底活用
C# における Redis 徹底活用
Takaaki Suzuki
Inside FastEnum
Inside FastEnum
Takaaki Suzuki
今日からできる!簡単 .NET 高速化 Tips
今日からできる!簡単 .NET 高速化 Tips
Takaaki Suzuki
30min Serverless xTuber
30min Serverless xTuber
Takaaki Suzuki
Tetris Algorithm
Tetris Algorithm
Takaaki Suzuki
C# 7 New Features
C# 7 New Features
Takaaki Suzuki
Live Coding で学ぶ C# 7
Live Coding で学ぶ C# 7
Takaaki Suzuki
C# 7 Current Status
C# 7 Current Status
Takaaki Suzuki
4 Colors Othello’s Algorithm
4 Colors Othello’s Algorithm
Takaaki Suzuki
Sharing Deep Dive
Sharing Deep Dive
Takaaki Suzuki
4 Colors Othello’s Algorithm @仙台 IT 文化祭 2017
4 Colors Othello’s Algorithm @仙台 IT 文化祭 2017
Takaaki Suzuki
DeclarativeSql
DeclarativeSql
Takaaki Suzuki
Sevens Algorithm
Sevens Algorithm
Takaaki Suzuki
Friendly
Friendly
Takaaki Suzuki
WPF Interoperability
WPF Interoperability
Takaaki Suzuki
Universal Appとは? -デバイスに依存しないアプリケーション開発-
Universal Appとは? -デバイスに依存しないアプリケーション開発-
Takaaki Suzuki
酒の肴はC# vNext
酒の肴はC# vNext
Takaaki Suzuki
Async History in .NET
Async History in .NET
Takaaki Suzuki
SignalR Tune-up
SignalR Tune-up
Takaaki Suzuki
Plus de Takaaki Suzuki
(20)
5 分で学ぶ Interpolated String Handler
5 分で学ぶ Interpolated String Handler
C# における Redis 徹底活用
C# における Redis 徹底活用
Inside FastEnum
Inside FastEnum
今日からできる!簡単 .NET 高速化 Tips
今日からできる!簡単 .NET 高速化 Tips
30min Serverless xTuber
30min Serverless xTuber
Tetris Algorithm
Tetris Algorithm
C# 7 New Features
C# 7 New Features
Live Coding で学ぶ C# 7
Live Coding で学ぶ C# 7
C# 7 Current Status
C# 7 Current Status
4 Colors Othello’s Algorithm
4 Colors Othello’s Algorithm
Sharing Deep Dive
Sharing Deep Dive
4 Colors Othello’s Algorithm @仙台 IT 文化祭 2017
4 Colors Othello’s Algorithm @仙台 IT 文化祭 2017
DeclarativeSql
DeclarativeSql
Sevens Algorithm
Sevens Algorithm
Friendly
Friendly
WPF Interoperability
WPF Interoperability
Universal Appとは? -デバイスに依存しないアプリケーション開発-
Universal Appとは? -デバイスに依存しないアプリケーション開発-
酒の肴はC# vNext
酒の肴はC# vNext
Async History in .NET
Async History in .NET
SignalR Tune-up
SignalR Tune-up
Dernier
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
Toru Tamaki
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
Ryo Sasaki
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
taisei2219
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
Toru Tamaki
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
Toru Tamaki
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Yuma Ohgami
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
danielhu54
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
sugiuralab
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
iPride Co., Ltd.
Dernier
(9)
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
Rx入門
1.
Hokuriku.NET C# Rx編 February 11
th /March 17 th , 2012 鈴木孝明
2.
Agenda • • • • • • • Rxの概要 オブザーバーパターン LINQによる記述 時間/イベント/非同期のシーケンス化 HotとCold スケジューラの利用 今日のまとめ
3.
さぁ、Rxの世界へ!! Rxの概要
4.
Rx (Reactive Extensions)
とは • 値群を時間軸に乗ったシーケンスとして捉える • 時間/イベント/非同期処理をLINQで記述 • .NET 3.5 SP1以降、SL 4以降、WP7で利用可能 • 特に非同期APIしかないSilverlight環境で威力を発揮 • Windows Phone 7にのみ標準搭載 • RxJSというJavaScript版もある • Microsoftの正式なプロジェクト
5.
時間軸を基にしたシーケンス • IObservable<T>は時間軸に乗る非同期な値群 • これに乗せられるものはすべて統一的に扱える •
例) タイマー/イベント/非同期処理 [出典] 連載 : Reactive Extensions (Rx) 入門 - @IT
6.
時間軸シーケンスのイメージ • ベルトコンベアのようなイメージで考える • • • • モノが流れてくる (=
IObservable<T>からの発行) 不純物を取り除く検査が行われる (= Where) 梱包作業が行われる (= Select) 配送される (= Subscribe) Where Select
7.
ライブラリの入手 • NuGet Gallery
- Rx-Main より取得
8.
ライブラリの入手 • ダウンロードサイト より取得 •
NuGet が使えない場合
9.
Rxの基本はPush通知!! オブザーバーパターン
10.
オブザーバーパターンとは • 疎結合のためのデザインパターン • 具象クラス間の依存なしに状態変化を通知する •
例) データ変更 → UI更新 • データがUIを知っている設計は極めて汎用性が低い • 観測対象 (サブジェクト) と観測者 (オブザーバー) で抽象化 • 一般的にはインターフェース/イベントで実現
11.
オブザーバーパターンの構成
12.
基本インターフェース • IObserver<T> :
観測者 OnNext(T value) 状態の変更を通知 OnError(Exception error) エラーの発生を通知 OnCompleted() 完了を通知 • IObservable<T> : 観測対象 Subscribe(IObserver<T> observer) 通知先を登録 • .NET Framework 4で新たに搭載された • .NET 3.5 SP1 / Silverlight 4環境ではRxライブラリが提供する • Windows Phone 7には標準搭載
13.
Push型 vs Pull型 Push型 Pull型 •
コネクションを張り、受信待機 • IObservable<T> • 各々必要に応じて取得しに行く • IEnumerable<T>
14.
IObserver<T>の省略 • IObserver<T>を毎回実装するのは手間 • デリゲートを渡すことでオブザーバーの生成を隠蔽 拡張メソッド •
隠蔽化によってコードの見え方が変わる • 「IObserver<T>の登録」から「Subscribeで処理」へ
15.
一人二役なSubject<T> • IObservable<T>とIObserver<T>の両方を実装 • Rxにおけるイベント •
いくつかの亜種がある Subject<T> BehaviorSubject<T> 最も基本的なもの 初期値ありSubject<T> ReplaySubject<T> 再発行時にリプレイ AsyncSubject<T> 非同期処理を模倣
16.
IObservable<T>の生成メソッド • Observable静的クラスに数多く提供されている • IObservable<T>を毎回実装するのは手間 •
定型句なものは生成メソッドを使って楽をする Observable.Range(3, 5); 3から始まり1ずつインクリ メントされた5つの値を返す Observable.Repeat(1, 3); 1を3回発行 Observable.Create(observer => { observer.OnNext(100); observer.OnCompleted(); return () => { … }; // Disposer }; Subscribeで接続されたオブ ザーバーに対して直接値を 発行
17.
宣言的に書ける美しさ!! LINQ による記述
18.
LINQスタイルでの記述 • メソッド形式 • クエリ式形式
19.
Where/Selectの内部実装 • IObserver<T>で受ける • フィルタリング/射影 •
IObservable<T>で返却 Source .Where(…) .Subscribe(observer);
20.
時間軸上の値を統一的に扱おう!! 時間/イベント/非同期の シーケンス化
21.
イベントのシーケンス化 • EventHandler/EventHandler<T>形式から生成 • Observable.FromEventPatternメソッドを利用 •
イベント通知はEventPattern<T>型 (Sender & EventArgs) で行われる • リフレクションによるオーバーロードもある • Action<T>/Func<T>など、独自形式から生成 • Observable.FromEventメソッドを利用 • 通知する型の形式変換も可能で、非常に柔軟性が高い
22.
非同期処理のシーケンス化 • ToAsync/Startメソッドでデリゲートからの生成 • 引数を与えたり、戻り値を受けることも可能 •
BeginXxx/EndXxx (APMパターン) からの生成 • FromAsyncPatternメソッドを利用 • OnCompletedが呼ばれるまでが非同期処理中 • 非同期処理の結果はOnCompletedの直前にOnNextで通知される • 結果が何もない場合はUnit構造体 (voidの代替) が通知される • 実行スレッドは既定でThreadPool上 • GUIアプリの場合、このままではUIに触れないので注意
23.
IObservable<T>の性質を知ろう!! HotとCold
24.
Hot vs Cold Hot
Observable Cold Observable • すべてのIObserver<T>に対して 一度に同じ値を送信 • それぞれのIObserver<T>に対して 個別に値を送信
25.
Cold to Hot
変換 • 一時的に流れを堰き止める (IConnecableObservable<T>) • その間に支流を作り、完成したら再放流
26.
Rxの柔軟性はココにあり!! スケジューラの利用
27.
スケジューラの概要 • 処理をいつ/どこで実行するかを振り分ける • IObservable<T>の生成メソッドに設定して利用 •
基本的にはメソッドのオーバーロードで指定可能 • 指定しないメソッドは暗黙にデフォルトが設定される • スレッド切り替え • Observable.ObserveOnメソッドで以降の動作スレッドを変更 • 柔軟性が確保される反面、パフォーマンスが悪い • Observable.RangeはEnumerable.Rangeより数百倍遅い
28.
スケジューラの種類 CurrentThreadScheduler 現在実行中のスレッド上で、キュー に登録されたものから順に処理 ImmediateScheduler 現在実行中のスレッド上で、即座に 実行 NewThreadScheduler それぞれ別スレッドで処理 EventLoopScheduler 指定されたスレッド上で処理 ThreadPoolScheduler スレッドプール上で処理 TaskPoolScheduler 指定されたTaskFactory上で処理 SynchronizationContextScheduler 指定されたSynchronizationContext に同期して処理 ControlScheduler 指定されたWinFormsコントロール のあるメッセージループで処理 DispatcherScheduler 指定されたDispatcher上で処理
29.
ココだけは押さえよう!! 今日のまとめ
30.
まとめ • オブザーバーパターンによるPush通知が基本 • 値群を時間軸に乗ったシーケンスとして捉える •
IObservable<T>とIObserver<T>で実現される • 時間/イベント/非同期処理をLINQで記述可能 • メソッド形式/クエリ式形式どちらでも書ける • メソッド形式の方ができることは多い
31.
まとめ • HotとColdという性質の違いがある • Hot
: すべてのIObserver<T>に対して一度に同じ値を送信 • Cold : それぞれのIObserver<T>に対して個別に値を送信 • スケジューラで柔軟性を提供している • スレッドの切り替え • 処理順序の変更 • パフォーマンスは大幅に低下する • .NET 3.5 SP1以降、SL 4以降、WP7で利用可能
32.
参考記事 • 連載 :
Reactive Extensions (Rx) 入門 • Reactive Extensions入門「まとめ」 • Reactive Extensions再入門 • Rx入門 - インデックス • neue.cc
Télécharger maintenant