C#でのRxの使い方を
ほんの少し理解した
2022/2/24
tat_tt
自己紹介
名前:tat_tt (たっと)
年齢:26歳(社会人4年目)
業務:C#を使ったデスクトップアプリ開発
目次
• 背景
• 本日お話しすること
• Rx (Reactive Extensions) とは
• C#でのRxの使い方
• ①非同期処理
• ②イベントの遅延受信
• ③イベントの合成
• まとめ
背景
難しそうで避けてたRx (Reactive Extensions)
だが、そろそろ使えるようにならないと...
普段使っているC#で実際に使ってみるか
なるほど。使い方はほんの少しわかった
今日はその知見を共有
本日お話しすること
以下2点が話題
• Rx (Reactive Extensions) とは
• C#でのRxの使い方
Rx (Reactive Extensions) とは
LINQ (コレクションやRDBをC#上で操作するための仕組み)で、
「非同期」や「イベント」を扱えるようにする仕組み
発生した非同期処理やイベントを値とみなして時間軸に乗せる。
その時間軸に乗っかってくる値(非同期処理やイベント)をLINQ
によって操作するイメージ。
イベントA
発生
時間
イベントB
発生
非同期処理A
開始
非同期処理A
終了 ・・・
これらを値とみなし操作する
(例:イベントA発生の値をリンク式で抽出するなど)
C#でのRxの使い方
以下3つの使い方を紹介。
(まあまあメジャーな使い方のはず...)
・非同期処理
・イベントの遅延受信
・イベント合成
C#でのRxの使い方 ~①非同期処理~
非同期処理を実行。
非同期処理完了後の処理を登録できる点が特徴。
非同期処理完了後にSubscribeで
登録した処理が呼び出される。
コンソールには以下の順で出力
される。
・Rxによる非同期処理中の処理
・Rxによる非同期処理完了
・非同期処理完了後の後処理
C#でのRxの使い方 ~②イベントの遅延受信~
UIに配置したListBoxのSelectionChanged (選択変更イベント)
をイベント発生の1秒後に受信。
連続で選択変更イベントが発生した場合のパフォーマンス劣化を
防止可能。
1行目でListBoxのSelectionChangedイベント発行を検出。
2行目で1行目のイベント発行から1秒間待機。
2行目での1秒間待機が完了したという値を受け取るタイミングで
初めて3行目で登録したハンドラを実行。
C#でのRxの使い方 ~③イベントの合成~
UIに配置したGridのマウスドラッグイベントを合成して作成。
以下の3つのイベントを合成して、オリジナルなマウスドラッグ
イベントを作成。
・マウス左ボタン押下イベント
・マウス移動イベント
・マウス左ボタンを離すイベント
まとめ
C#でのRxの使い方を共有
• そもそもRxって何?
• LINQで非同期とイベントを扱えるようにする仕組み
• どんな使い方ができるの?
• 非同期処理
• 非同期完了後の追加処理が簡単に実現可能
• イベントの遅延受信
• パフォーマンス劣化の防止に活用可能
• イベントの合成
• 複数イベントを組み合わせてオリジナルなイベントの作成が可能
使い方がほんの少し分かっただけなので、Rxの概念や仕組みに
ついてより知見を増やしていきたい。

C#でのrxの使い方をほんの少し理解した