Submit Search
Upload
async/await deep dive
•
3 likes
•
8,979 views
Takaaki Suzuki
Follow
2012/06/09 Community Open Day 2012 セッション資料
Read less
Read more
Technology
Sports
Report
Share
Report
Share
1 of 32
Download now
Download to read offline
Recommended
Async History in .NET
Async History in .NET
Takaaki Suzuki
Async deepdive before de:code
Async deepdive before de:code
Kouji Matsui
Infrastructure as codeのススメ
Infrastructure as codeのススメ
kanji htmt
AI先生と外国語会話を練習しよう!
AI先生と外国語会話を練習しよう!
K Kimura
真Intermediate languageのキホン
真Intermediate languageのキホン
Kouji Matsui
式の体を成して無い式を式の体を成すように式と式木で何とかする式
式の体を成して無い式を式の体を成すように式と式木で何とかする式
Kouji Matsui
俺 と ご褒美 Bot
俺 と ご褒美 Bot
Masayuki KaToH
パターンでわかる! .NET Coreの非同期処理
パターンでわかる! .NET Coreの非同期処理
Kouji Matsui
Recommended
Async History in .NET
Async History in .NET
Takaaki Suzuki
Async deepdive before de:code
Async deepdive before de:code
Kouji Matsui
Infrastructure as codeのススメ
Infrastructure as codeのススメ
kanji htmt
AI先生と外国語会話を練習しよう!
AI先生と外国語会話を練習しよう!
K Kimura
真Intermediate languageのキホン
真Intermediate languageのキホン
Kouji Matsui
式の体を成して無い式を式の体を成すように式と式木で何とかする式
式の体を成して無い式を式の体を成すように式と式木で何とかする式
Kouji Matsui
俺 と ご褒美 Bot
俺 と ご褒美 Bot
Masayuki KaToH
パターンでわかる! .NET Coreの非同期処理
パターンでわかる! .NET Coreの非同期処理
Kouji Matsui
20190319 KIS Open Seminar LT
20190319 KIS Open Seminar LT
Syota Yano
Effective java1
Effective java1
irof N
はんなりPython #45
はんなりPython #45
hiroya akita
KyotoLT(Online) 第26回
KyotoLT(Online) 第26回
hiroya akita
Win32 APIをてなずけよう
Win32 APIをてなずけよう
Kouji Matsui
メタプログラミングでExcel仕様書よさらば
メタプログラミングでExcel仕様書よさらば
Kouji Matsui
Nespのコード生成
Nespのコード生成
Kouji Matsui
Vsugday2012 summer tokyo_aoyagi
Vsugday2012 summer tokyo_aoyagi
vsug_jim
“なめらか”なメトロスタイルアプリを作るために ~WinRT の非同期性を活用したアプリ開発~
“なめらか”なメトロスタイルアプリを作るために ~WinRT の非同期性を活用したアプリ開発~
ShinichiAoyagi
Usage of Thread Pool for Non blocking frameworks
Usage of Thread Pool for Non blocking frameworks
二郎 釘屋
CEDEC2021 Android iOS 実機上での自動テストをより楽に有意義にする為に ~端末管理・イメージ転送・動画記録等の周辺情報のノウハウ共有~
CEDEC2021 Android iOS 実機上での自動テストをより楽に有意義にする為に ~端末管理・イメージ転送・動画記録等の周辺情報のノウハウ共有~
SEGADevTech
iOSやAndroidアプリ開発のGoodPractice
iOSやAndroidアプリ開発のGoodPractice
Ken Morishita
HTML5とか勉強会#48 ionic
HTML5とか勉強会#48 ionic
Kenichi Kanai
Ansibleは簡単なIT自動化
Ansibleは簡単なIT自動化
You&I
opensource and accessibility (Dec2000) Part 1
opensource and accessibility (Dec2000) Part 1
Takuya Nishimoto
20131201 テスト自動化カンファレンスLT「激しいUI変更との戦い」
20131201 テスト自動化カンファレンスLT「激しいUI変更との戦い」
Hiroko Tamagawa
20101127 Android Usability Seminar
20101127 Android Usability Seminar
Visso株式会社
ネットワークエンジニア的Ansibleの始め方
ネットワークエンジニア的Ansibleの始め方
akira6592
失敗と向き合う姿勢を正す話
失敗と向き合う姿勢を正す話
LIFULL Co., Ltd.
たのしいNode.js
たのしいNode.js
ishiki-takai
Osdt2015 saito
Osdt2015 saito
Hideki Saito
Nodeにしましょう
Nodeにしましょう
Yuzo Hebishima
More Related Content
What's hot
20190319 KIS Open Seminar LT
20190319 KIS Open Seminar LT
Syota Yano
Effective java1
Effective java1
irof N
はんなりPython #45
はんなりPython #45
hiroya akita
KyotoLT(Online) 第26回
KyotoLT(Online) 第26回
hiroya akita
Win32 APIをてなずけよう
Win32 APIをてなずけよう
Kouji Matsui
メタプログラミングでExcel仕様書よさらば
メタプログラミングでExcel仕様書よさらば
Kouji Matsui
Nespのコード生成
Nespのコード生成
Kouji Matsui
What's hot
(7)
20190319 KIS Open Seminar LT
20190319 KIS Open Seminar LT
Effective java1
Effective java1
はんなりPython #45
はんなりPython #45
KyotoLT(Online) 第26回
KyotoLT(Online) 第26回
Win32 APIをてなずけよう
Win32 APIをてなずけよう
メタプログラミングでExcel仕様書よさらば
メタプログラミングでExcel仕様書よさらば
Nespのコード生成
Nespのコード生成
Similar to async/await deep dive
Vsugday2012 summer tokyo_aoyagi
Vsugday2012 summer tokyo_aoyagi
vsug_jim
“なめらか”なメトロスタイルアプリを作るために ~WinRT の非同期性を活用したアプリ開発~
“なめらか”なメトロスタイルアプリを作るために ~WinRT の非同期性を活用したアプリ開発~
ShinichiAoyagi
Usage of Thread Pool for Non blocking frameworks
Usage of Thread Pool for Non blocking frameworks
二郎 釘屋
CEDEC2021 Android iOS 実機上での自動テストをより楽に有意義にする為に ~端末管理・イメージ転送・動画記録等の周辺情報のノウハウ共有~
CEDEC2021 Android iOS 実機上での自動テストをより楽に有意義にする為に ~端末管理・イメージ転送・動画記録等の周辺情報のノウハウ共有~
SEGADevTech
iOSやAndroidアプリ開発のGoodPractice
iOSやAndroidアプリ開発のGoodPractice
Ken Morishita
HTML5とか勉強会#48 ionic
HTML5とか勉強会#48 ionic
Kenichi Kanai
Ansibleは簡単なIT自動化
Ansibleは簡単なIT自動化
You&I
opensource and accessibility (Dec2000) Part 1
opensource and accessibility (Dec2000) Part 1
Takuya Nishimoto
20131201 テスト自動化カンファレンスLT「激しいUI変更との戦い」
20131201 テスト自動化カンファレンスLT「激しいUI変更との戦い」
Hiroko Tamagawa
20101127 Android Usability Seminar
20101127 Android Usability Seminar
Visso株式会社
ネットワークエンジニア的Ansibleの始め方
ネットワークエンジニア的Ansibleの始め方
akira6592
失敗と向き合う姿勢を正す話
失敗と向き合う姿勢を正す話
LIFULL Co., Ltd.
たのしいNode.js
たのしいNode.js
ishiki-takai
Osdt2015 saito
Osdt2015 saito
Hideki Saito
Nodeにしましょう
Nodeにしましょう
Yuzo Hebishima
第39回「Windows Server 2003 EOSに備えよう -SQL Serverはどうする?-」(2014/12/18 on しすなま!)
第39回「Windows Server 2003 EOSに備えよう -SQL Serverはどうする?-」(2014/12/18 on しすなま!)
System x 部 (生!) : しすなま! @ Lenovo Enterprise Solutions Ltd.
サーバ擬人化ユーザ会キックオフ資料 Slideshare ver
サーバ擬人化ユーザ会キックオフ資料 Slideshare ver
Seiichiro Ishida
TotalViewを使ったFOCUSスパコンでのデバッグ体験 2016
TotalViewを使ったFOCUSスパコンでのデバッグ体験 2016
RWSJapan
OpenSpan_PreMarketing
OpenSpan_PreMarketing
motani_kamakura
Kobe sec#7 summary
Kobe sec#7 summary
Yukio NAGAO
Similar to async/await deep dive
(20)
Vsugday2012 summer tokyo_aoyagi
Vsugday2012 summer tokyo_aoyagi
“なめらか”なメトロスタイルアプリを作るために ~WinRT の非同期性を活用したアプリ開発~
“なめらか”なメトロスタイルアプリを作るために ~WinRT の非同期性を活用したアプリ開発~
Usage of Thread Pool for Non blocking frameworks
Usage of Thread Pool for Non blocking frameworks
CEDEC2021 Android iOS 実機上での自動テストをより楽に有意義にする為に ~端末管理・イメージ転送・動画記録等の周辺情報のノウハウ共有~
CEDEC2021 Android iOS 実機上での自動テストをより楽に有意義にする為に ~端末管理・イメージ転送・動画記録等の周辺情報のノウハウ共有~
iOSやAndroidアプリ開発のGoodPractice
iOSやAndroidアプリ開発のGoodPractice
HTML5とか勉強会#48 ionic
HTML5とか勉強会#48 ionic
Ansibleは簡単なIT自動化
Ansibleは簡単なIT自動化
opensource and accessibility (Dec2000) Part 1
opensource and accessibility (Dec2000) Part 1
20131201 テスト自動化カンファレンスLT「激しいUI変更との戦い」
20131201 テスト自動化カンファレンスLT「激しいUI変更との戦い」
20101127 Android Usability Seminar
20101127 Android Usability Seminar
ネットワークエンジニア的Ansibleの始め方
ネットワークエンジニア的Ansibleの始め方
失敗と向き合う姿勢を正す話
失敗と向き合う姿勢を正す話
たのしいNode.js
たのしいNode.js
Osdt2015 saito
Osdt2015 saito
Nodeにしましょう
Nodeにしましょう
第39回「Windows Server 2003 EOSに備えよう -SQL Serverはどうする?-」(2014/12/18 on しすなま!)
第39回「Windows Server 2003 EOSに備えよう -SQL Serverはどうする?-」(2014/12/18 on しすなま!)
サーバ擬人化ユーザ会キックオフ資料 Slideshare ver
サーバ擬人化ユーザ会キックオフ資料 Slideshare ver
TotalViewを使ったFOCUSスパコンでのデバッグ体験 2016
TotalViewを使ったFOCUSスパコンでのデバッグ体験 2016
OpenSpan_PreMarketing
OpenSpan_PreMarketing
Kobe sec#7 summary
Kobe sec#7 summary
More from 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
SignalR Tune-up
SignalR Tune-up
Takaaki Suzuki
Twilioと.NET
Twilioと.NET
Takaaki Suzuki
More from 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
SignalR Tune-up
SignalR Tune-up
Twilioと.NET
Twilioと.NET
async/await deep dive
1.
async/await deep dive -Community Open
Day 2012- June 9th, 2012 xin9le
2.
Profile Agenda Name 鈴木孝明 Twitter Account @xin9le Blog http://xin9le.net/ Occupation Programmer Hobby Programming,
Piano, Tennis, English
3.
Agenda 1. 非同期処理の基礎 2. 非同期メソッドの概要 3.
非同期メソッドの内部実装 4. WinRTとの相互運用 5. まとめ
4.
Basis for Asynchronous
5.
Sync vs Async
Why UIスレッド UIスレッド 応答不能 応答可能 別スレッド
6.
Why is it
important ? UIが長くフリーズするのを防ぐ • • タッチデバイスでは不快感が特に顕著 • I/Oなどをバックグラウンド処理して効率化 • 多機能化によるパフォーマンスの劣化への対処 • 複数コアを利用した並列処理 避けては通れない課題
7.
History Quick Revie async/await Reactive
Extensions Event-based Task-based Async Programming Model ThreadPool Thread
8.
Quick Review -ちょこっとコードを見てみよう-
9.
About Asynchronous Method
10.
async Modifier awa • 修飾した関数は1つ以上のawait演算子を含む • await演算子以降をコンパイラによって継続渡しに
11.
await Operator Can • 対象のタスクが完了していない場合、以降の処理を 継続タスクとして登録 • 完了したら、登録しておいた継続タスクを実行 • 待機中、呼び出し元スレッドをブロックしない (=
即座にreturnされる) return
12.
Can use anywhere • async修飾子はラムダ式や匿名メソッドにも適用可能 • await演算子は式が書ける箇所ならどこでも利用可能
13.
UI Marshaling 継続処理は自動的にUIスレッド上で実行される • • • 自前でUIスレッドに処理を戻す必要なし 後述の独自Awaitableパターン実装時はその限りではない UIスレッドに戻すかどうかは明示的に制御可能 • • • ConfigureAwaitメソッド True :
同期する False : 同期しない
14.
Return Value Excep • 非同期メソッドの戻り値の型は以下のいずれか • void型 • • 非同期メソッドの完了を待機する必要がない場合 イベントハンドラなどで利用 Task
/ Task<T>型 • • 非同期メソッドの完了を待機したり、戻り値を取得する 必要がある場合
15.
Exception Handling 同期処理と同様の例外処理が可能 • • APMやEAPの例外処理はカオスになりがち
16.
Internal Implementation -dive into asynchronous
method-
17.
Decompile Essence コンパイラはasync/awaitをどう変換しているのか • • • 中間言語(IL)を逆コンパイルして解析 ILSpy (http://wiki.sharpdevelop.net/ILSpy.ashx)
が便利
18.
Essence Compiler Req
19.
Compiler Requirement -awaitableになるためにはGetAwaiterメソッドを持つ • • 返されるAwaiterの型は問われない (classでもstructでもOK) • 自身のメソッドでも拡張メソッドでもOK
20.
Compiler Requirement -awaiterになるためにはINotifyCompletionインターフェースを実装 • • OnCompletedメソッドの実装の義務付け IsCompletedプロパティを持つ GetResultメソッドを持つ • • • 戻り値の型は問われない
21.
Custom Implementation -Let’s try!!-
22.
Interoperability with WinRT -one step
ahead-
23.
Async on WinRT
Co WinRTの非同期操作は以下のいずれかを実装 • Progress Results Yes No Yes IAsyncOperationWithProgress IAsyncOperation No IAsyncActionWithProgress IAsyncAction すべてCompletedプロパティを持つ • • • 完了時に呼び出されるデリゲートを1度だけ設定可能 完了後に設定してもCallbackされる これをawaitできればMetroの開発が楽に!!
24.
Convert to Task
Dire • これらのInterfaceをTaskに変換できればawait可能 • TaskCompletionSource<T>を使って拡張メソッド化 • 内部保持するTaskの完了をSetResultメソッドなどで制御
25.
Direct await .NET
S • • • .AsTask();とか毎回×2書きたくない... .AsTask();と書かずにawaitするには? • GetAwaiterを実装すればよい (参照 : コンパイラ要件) 以下は完全に同等
26.
.NET Standard • 標準で多数の拡張メソッドが提供されている • awaitをより高度に扱う場合はAsTaskを利用 • • • • 非同期処理をキャンセルする 進捗通知を行う 複数の非同期処理がすべて完了するまで待機する 以後の処理をUIスレッドに戻さない (etc...)
27.
Today’s Summary -ココだけは押さえよう!!-
28.
Summary Summary • async/awaitはペアで利用する • 非同期メソッド中にawaitは何度でも書ける • 残りの処理は継続として登録され、関数から抜ける • 継続処理は自動的にUIスレッド上で実行される • 同期処理と同様の例外処理ができる
29.
Summary Summary • コンパイラによって内部的に構造体が生成される • GetAwaiterメソッドがあればawait可能 • Awaiterになるためには以下の実装が必要 • INotifyCompletionインターフェース •
IsCompletedプロパティ • GetResultメソッド
30.
Summary Reference • WinRTは非同期処理は4つのInterfaceからなる • 標準で用意された拡張メソッドでawait可能 • より高度な操作が必要な場合はAsTaskを利用 • • 非同期処理のキャンセル 進捗通知 (etc...)
31.
Reference Thanks • WinRTとawaitを掘り下げる • 非同期処理 • 非同期メソッドの内部実装 • Windowsランタイムの非同期性により高速で滑らかなア プリにする http://blogs.msdn.com/b/windowsappdev_ja/archive/2012/04/30/winrt-await.aspx http://ufcpp.net/study/csharp/sp5_async.html http://ufcpp.net/study/csharp/sp5_awaitable.html http://blogs.msdn.com/b/windowsappdev_ja/archive/2012/03/26/windows.aspx • Windows Developer
Days 2012 | Cannel 9 http://channel9.msdn.com/Events/Windows-Developer-Days/Windows-Developer-Days2012
32.
Thanks Thank you for
your attending. Enjoy Asynchronous!! with .NET Framework 4.5
Download now