[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
SlideShare a Scribd company logo
非同期勉強会
Async History in .NET
- 50分でお届けする14年分の進化 -
Name
鈴木孝明
Twitter Account
@xin9le
Award
Microsoft MVP for Visual C#
Web Site
http://xin9le.net
About Me
Async History in .NET
サラッと押さえる非同期処理の基礎
Basis of Asynchronous
同期 vs 非同期
UIスレッド
応答可能
UIスレッド 別スレッド
応答不能
フリーズ防止
CUI / GUIなら、まだ多少はフリーズに耐えられる
TUI / NUIになると驚くほど耐えられない
バックグラウンド処理による効率化
裏側で勝手に終わってると心地いい
非同期処理の必要性
主な適用シーン
DBアクセス重たい処理
ファイルの
読み書き
ネット
ワーク通信
.NETが提供してきた非同期パターンの数々
Asynchronous History
APIの変遷
Task-based
async/await
Reactive Extensions
Event-based
Async Programming Model
ThreadPool
Thread
同期的な書き方
Thread
1スレッド
1MB程度
作成コスト
が大きい
ThreadPool
効率的な
タスク処理
スレッドを
使い回す
Async Programming Model
書き方が
かなり煩雑
BeginXxx
EndXxx
Event-based
明確な処理
の切り分け
Task-based
簡潔な
処理フロー
Reactive Extensions
宣言的な
書き味
async/await
もはや魔法
同期とほぼ
同じ書き方
非同期メソッドの基本的な使い方
async/await
async 修飾子 / await 演算子
含まないと
警告が出る
1つ以上の
awaitを含む
async/await の挙動
UIスレッド 別スレッド
任意の
ユーザー操作
戻り値 : void
それ以外は
非推奨
イベント
専用
戻り値 : Task / Task<T>
待機/戻り値
が必要な時
広範な記述可能箇所
例外 :
エントリーポイント
コンストラクタ / デストラクタ
catch / finally句
lockステートメント (etc...)
大抵の式に
適用可
既定では自動復帰
「UIスレッドに戻す」という意識すら不要
明示的にスレッドを戻さない
呼び出し元スレッドへの復帰
例外処理
try句でのみ
await可
いつもの
書き方
ちょっと番外編
Extra Contents
MSテストの非同期
戻り値を
Taskにする
awaitの
記述が可能
ASP.NET MVC 4 以降の非同期
産廃:
AsyncController
Taskに
包むだけ
WCF 4.5 で非同期に対応
サーバー側
の効率化
4つのインターフェースから成る
Task型との相互変換の提供
C#/.NET では何も意識することなく async/await で記述可能
http://xin9le.net/articles/79
ストアアプリでの非同期
IAsyncAction IAsyncActionWithProgress
IAsyncOperation IAsyncOperationWithProgress
await はコンパイラが別の形に展開する
内部的にはクラスが自動生成される
C# 5.0現在、ローカル変数はメンバー変数に昇格している
vNext では変数昇格が最小限になる (予定)
ガベージコレクション周りのパフォーマンス改善
http://ufcpp.wordpress.com/
2014/04/05/c-vnext-roslyn-でのasyncawait-の仕様変更/
コンパイラ展開の仕様変更
折角なので非同期な話題のLTでも
Another Story
Async History in .NET
地元の某上場企業に入社
パソコンに興味があっただけのただの新卒
2007/04
新人プログラミング研修
intもstringも知らない子でした
先生は某C# MVP
2007/05 – 2007/09
陸の孤島で
缶詰教育
独学でC#の勉強を開始
(できちゃった)結婚の現実逃避でした...
2008/02
2009/01/27 – 2009/01/28
Tech Days 2009の資料公開
参加できなかったから心待ちにしてた
2009/03/02
Async History in .NET
Hokuriku.NET vol.4
勇気を出して勉強会に初参加
長沢さん (@tomohn) の影響でTwitterを始める
2010/07/17
Hokuriku.NET vol.6
勉強会で初登壇 (VSTOネタ)
2011/04/23
http://atnd.org/events/13237
C#ハンズオン キックオフ
Hokuriku.NETの代表 (@kabakiyo) が突然の「やります^^」宣言
同日
Hokuriku.NET C# -LINQ入門-
講師は当時北陸唯一のC# MVPだった小島さん
2011/06/11 – 2011/06/25
http://atnd.org/events/15800
このときの懇親会が
始まりだった...
「次はTPLがいいですー」
俗に言う「お前がやれ」事件
「次は鈴木さんがやりましょう」
ファッ!? (゚Д゚;)
恩師には逆らえず...
Blogで「TPL入門」を書き始める
それからしばらく「勉強して記事書いて...」の繰り返し
ハンズオン勉強会の成功ため必至
2011/07/08
http://xin9le.net/tpl-intro
ReactiveProperty公開
LINQの神様 (@neuecc) の超画期的なアイディア
「Rxってなんぞ!?」と興味津々
2011/08/26
http://neue.cc/2011/08/26_341.html
Visual Studio 11 Developer Preview 公開
.NET Framework 4.5 / C# 5.0
新キーワード : async/await
2011/09/14
Hokuriku.NET C# -TPL入門-
人生初めてのハンズオン講師
Ustream中継/録画もあって超緊張してました
2011/09/17
http://atnd.org/events/19165
このときの懇親会でも...
「次はRxがいいなー (誰かお願い)」
「お前がやれ」事件 Part.2
「じゃあやってよ ^^」
/(^o^)\
代表にも逆らえず...
Hokuriku.NET vol.8
async/await 触ってみたよ系
2011/11/19
http://atnd.org/events/20801
Blogで「Rx入門」を書き始める
TPL入門同様「勉強して記事書いて...」の繰り返し
迫りくるハンズオン勉強会のため必至
2011/12/10
http://xin9le.net/rx-intro
某所からRx入門記事の執筆依頼を受ける
散々悩んだ結果、丁重にお断りさせて頂きました
(全く自信がなかった...)
2012/01/04
Hokuriku.NET C# -Rx入門-
人生2度目のハンズオン講師
1回で伝えきれず、2回に渡って開催することに
2012/02/11 - 2012/03/17
http://atnd.org/events/23964
Hokuriku.NET vol.9
Rxで簡単に実現できるサンプルの紹介
「そう、Rxならね」
2012/03/10
http://atnd.org/events/24756
Community Open Day 2012
async/await の使い方紹介
コンパイラ展開を逆コンパイルで解析したり
2012/06/09
http://atnd.org/events/28159
MVP Award 初受賞
2012/07/01
Microsoft MVP for Visual C#
Async History in .NET
Blogで「非同期メソッド入門」を開始
COD 2012のために折角いっぱい調べたし、まとめとこ
2012/07/12
http://xin9le.net/async-method-intro
@ITさんより連載記事執筆の依頼を受ける
C# 5.0のリリースに先立ち非同期メソッドの連載をしたい、と
Blogで入門記事を書くと意外と反響あって驚く
2012/08/10
「async/await入門」公開
依頼されてから公開されるまでのスピード感
毎月1本 (全3回) の連載でしたが、大変さを思い知りました...
2012/08/31
http://www.atmarkit.co.jp/
ait/subtop/features/dotnet/app/masterasync_index.html
Async History in .NET
地元企業向けに非同期勉強会を開催
Rx だけのハズが延長営業で async/await もお願いされたり
頼まれると基本断れないタチ (#ご依頼ください)
2012/09/14
http://xin9le.net/articles/35
Hokuriku.NET × WCAF
地元デザイナーとの合同勉強会
デザイナーにも「止まらない UI/UX」を意識するように説く
2013/04/13
http://xin9le.net/articles/41
北信越のC# MVPでコーディング対決
@AILight / @Fujiwo / @xin9le
すごく盛り上がってたと思ったら、なんとNSAT 192を記録
2013/05/11
http://atnd.org/events/37799
MVP Award 再受賞
2013/07/01
Microsoft MVP for Visual C#
Async History in .NET
業務でCTI (電話応対システム) を構築
WPF + SignalR + Web API + Rx + async/await (etc...)
電話の処理って非同期処理のオンパレード
2013/09/01
ReactiveProperty Portable
かずきさん (@okazuki) と一緒に開発者として参加
Taskベースの非同期検証機能を追加したりと、少しばかり貢献
2013/10/02
https://reactiveproperty.codeplex.com/
大量の有名人に遭遇
2013/11/18 – 2013/11/21
2013 MVP Global Summit Nov
C#の父:
Anders Hejlsberg
ASP.NETのアーキテクト:
Scott Hanselman
GitHubの中の人:
Phil Haack
SignalRの作者:
Damian Edwards
赤シャツ副社長:
Scott Guthrie
C#/VBチームの非同期担当:
Lucian Wischik
ReactiveSignalR
SignalR の少し面倒な記述を Rx を使って楽に
GitHub / NuGet で絶賛公開中!!
2014/01/02
http://xin9le.net/articles/117
http://www.slideshare.net/xin9le/reactivesignalr
非同期勉強会
2014/05/10
Enjoy Asynchronous!!
Thank you
For your good experience.
Asynchronous

More Related Content

Async History in .NET