84
非同期勉強会 Async History in .NET - 50分でお届けする14年分の進化 -

Async History in .NET

Embed Size (px)

DESCRIPTION

2014/05/10 非同期勉強会 セッション資料

Citation preview

Page 1: Async History in .NET

非同期勉強会

Async History in .NET- 50分でお届けする14年分の進化 -

Page 2: Async History in .NET

Name

鈴木孝明

Twitter Account

@xin9le

Award

Microsoft MVP for Visual C#

Web Site

http://xin9le.net

About Me

Page 3: Async History in .NET
Page 4: Async History in .NET

サラッと押さえる非同期処理の基礎

Basis of Asynchronous

Page 5: Async History in .NET

同期 vs 非同期

UIスレッド

応答可能

UIスレッド 別スレッド

応答不能

Page 6: Async History in .NET

フリーズ防止CUI / GUIなら、まだ多少はフリーズに耐えられる

TUI / NUIになると驚くほど耐えられない

バックグラウンド処理による効率化裏側で勝手に終わってると心地いい

非同期処理の必要性

Page 7: Async History in .NET

主な適用シーン

DBアクセス重たい処理ファイルの読み書き

ネットワーク通信

Page 8: Async History in .NET

.NETが提供してきた非同期パターンの数々

Asynchronous History

Page 9: Async History in .NET

APIの変遷

Task-based

async/await

Reactive Extensions

Event-based

Async Programming Model

ThreadPool

Thread

Page 10: Async History in .NET

同期的な書き方

Page 11: Async History in .NET

Thread

1スレッド1MB程度

作成コストが大きい

Page 12: Async History in .NET

ThreadPool

効率的なタスク処理

スレッドを使い回す

Page 13: Async History in .NET

Async Programming Model

書き方がかなり煩雑

BeginXxxEndXxx

Page 14: Async History in .NET

Event-based

明確な処理の切り分け

Page 15: Async History in .NET

Task-based

簡潔な処理フロー

Page 16: Async History in .NET

Reactive Extensions

宣言的な書き味

Page 17: Async History in .NET

async/await

もはや魔法同期とほぼ同じ書き方

Page 18: Async History in .NET

非同期メソッドの基本的な使い方

async/await

Page 19: Async History in .NET

async 修飾子 / await 演算子

含まないと警告が出る

1つ以上のawaitを含む

Page 20: Async History in .NET

async/await の挙動

UIスレッド 別スレッド

任意のユーザー操作

Page 21: Async History in .NET

戻り値 : void

それ以外は非推奨

イベント専用

Page 22: Async History in .NET

戻り値 : Task / Task<T>

待機/戻り値が必要な時

Page 23: Async History in .NET

広範な記述可能箇所

例外 :

エントリーポイントコンストラクタ / デストラクタcatch / finally句lockステートメント (etc...)

大抵の式に適用可

Page 24: Async History in .NET

既定では自動復帰「UIスレッドに戻す」という意識すら不要

明示的にスレッドを戻さない

呼び出し元スレッドへの復帰

Page 25: Async History in .NET

例外処理

try句でのみawait可

いつもの書き方

Page 26: Async History in .NET

ちょっと番外編

Extra Contents

Page 27: Async History in .NET

MSテストの非同期

戻り値をTaskにする

awaitの記述が可能

Page 28: Async History in .NET

ASP.NET MVC 4 以降の非同期

産廃:AsyncController

Taskに包むだけ

Page 29: Async History in .NET

WCF 4.5 で非同期に対応

サーバー側の効率化

Page 30: Async History in .NET

4つのインターフェースから成る

Task型との相互変換の提供C#/.NET では何も意識することなく async/await で記述可能

http://xin9le.net/articles/79

ストアアプリでの非同期

IAsyncAction IAsyncActionWithProgress

IAsyncOperation IAsyncOperationWithProgress

Page 31: Async History in .NET

await はコンパイラが別の形に展開する内部的にはクラスが自動生成される

C# 5.0現在、ローカル変数はメンバー変数に昇格している

vNext では変数昇格が最小限になる (予定)

ガベージコレクション周りのパフォーマンス改善

http://ufcpp.wordpress.com/2014/04/05/c-vnext-roslyn-でのasyncawait-の仕様変更/

コンパイラ展開の仕様変更

Page 32: Async History in .NET

折角なので非同期な話題のLTでも

Another Story

Page 33: Async History in .NET
Page 34: Async History in .NET

地元の某上場企業に入社パソコンに興味があっただけのただの新卒

2007/04

Page 35: Async History in .NET

新人プログラミング研修intもstringも知らない子でした

先生は某C# MVP

2007/05 – 2007/09

Page 36: Async History in .NET

陸の孤島で缶詰教育

Page 37: Async History in .NET

独学でC#の勉強を開始(できちゃった)結婚の現実逃避でした...

2008/02

Page 38: Async History in .NET

2009/01/27 – 2009/01/28

Page 39: Async History in .NET

Tech Days 2009の資料公開参加できなかったから心待ちにしてた

2009/03/02

Page 40: Async History in .NET
Page 41: Async History in .NET

Hokuriku.NET vol.4勇気を出して勉強会に初参加

長沢さん (@tomohn) の影響でTwitterを始める

2010/07/17

Page 42: Async History in .NET

Hokuriku.NET vol.6勉強会で初登壇 (VSTOネタ)

2011/04/23

http://atnd.org/events/13237

Page 43: Async History in .NET

C#ハンズオンキックオフHokuriku.NETの代表 (@kabakiyo) が突然の「やります^^」宣言

同日

Page 44: Async History in .NET

Hokuriku.NET C# -LINQ入門-講師は当時北陸唯一のC# MVPだった小島さん

2011/06/11 – 2011/06/25

http://atnd.org/events/15800

Page 45: Async History in .NET

このときの懇親会が始まりだった...

Page 46: Async History in .NET

「次はTPLがいいですー」

俗に言う「お前がやれ」事件

「次は鈴木さんがやりましょう」

Page 47: Async History in .NET

ファッ!? (゚Д゚;)恩師には逆らえず...

Page 48: Async History in .NET

Blogで「TPL入門」を書き始めるそれからしばらく「勉強して記事書いて...」の繰り返し

ハンズオン勉強会の成功ため必至

2011/07/08

http://xin9le.net/tpl-intro

Page 49: Async History in .NET

ReactiveProperty公開LINQの神様 (@neuecc) の超画期的なアイディア

「Rxってなんぞ!?」と興味津々

2011/08/26

http://neue.cc/2011/08/26_341.html

Page 50: Async History in .NET

Visual Studio 11 Developer Preview 公開.NET Framework 4.5 / C# 5.0

新キーワード : async/await

2011/09/14

Page 51: Async History in .NET

Hokuriku.NET C# -TPL入門-人生初めてのハンズオン講師

Ustream中継/録画もあって超緊張してました

2011/09/17

http://atnd.org/events/19165

Page 52: Async History in .NET

このときの懇親会でも...

Page 53: Async History in .NET

「次はRxがいいなー (誰かお願い)」

「お前がやれ」事件 Part.2

「じゃあやってよ ^^」

Page 54: Async History in .NET

/(^o^)\代表にも逆らえず...

Page 55: Async History in .NET

Hokuriku.NET vol.8async/await 触ってみたよ系

2011/11/19

http://atnd.org/events/20801

Page 56: Async History in .NET

Blogで「Rx入門」を書き始めるTPL入門同様「勉強して記事書いて...」の繰り返し

迫りくるハンズオン勉強会のため必至

2011/12/10

http://xin9le.net/rx-intro

Page 57: Async History in .NET

某所からRx入門記事の執筆依頼を受ける散々悩んだ結果、丁重にお断りさせて頂きました

(全く自信がなかった...)

2012/01/04

Page 58: Async History in .NET

Hokuriku.NET C# -Rx入門-人生2度目のハンズオン講師

1回で伝えきれず、2回に渡って開催することに

2012/02/11 - 2012/03/17

http://atnd.org/events/23964

Page 59: Async History in .NET

Hokuriku.NET vol.9Rxで簡単に実現できるサンプルの紹介

「そう、Rxならね」

2012/03/10

http://atnd.org/events/24756

Page 60: Async History in .NET

Community Open Day 2012async/await の使い方紹介

コンパイラ展開を逆コンパイルで解析したり

2012/06/09

http://atnd.org/events/28159

Page 61: Async History in .NET

MVP Award 初受賞2012/07/01

Microsoft MVP for Visual C#

Page 62: Async History in .NET
Page 63: Async History in .NET

Blogで「非同期メソッド入門」を開始COD 2012のために折角いっぱい調べたし、まとめとこ

2012/07/12

http://xin9le.net/async-method-intro

Page 64: Async History in .NET

@ITさんより連載記事執筆の依頼を受けるC# 5.0のリリースに先立ち非同期メソッドの連載をしたい、と

Blogで入門記事を書くと意外と反響あって驚く

2012/08/10

Page 65: Async History in .NET

「async/await入門」公開依頼されてから公開されるまでのスピード感

毎月1本 (全3回) の連載でしたが、大変さを思い知りました...

2012/08/31

http://www.atmarkit.co.jp/ait/subtop/features/dotnet/app/masterasync_index.html

Page 66: Async History in .NET
Page 67: Async History in .NET

地元企業向けに非同期勉強会を開催Rx だけのハズが延長営業で async/await もお願いされたり

頼まれると基本断れないタチ (#ご依頼ください)

2012/09/14

http://xin9le.net/articles/35

Page 68: Async History in .NET

Hokuriku.NET × WCAF地元デザイナーとの合同勉強会

デザイナーにも「止まらない UI/UX」を意識するように説く

2013/04/13

http://xin9le.net/articles/41

Page 69: Async History in .NET

北信越のC# MVPでコーディング対決@AILight / @Fujiwo / @xin9le

すごく盛り上がってたと思ったら、なんとNSAT 192を記録

2013/05/11

http://atnd.org/events/37799

Page 70: Async History in .NET

MVP Award 再受賞2013/07/01

Microsoft MVP for Visual C#

Page 71: Async History in .NET
Page 72: Async History in .NET

業務でCTI (電話応対システム) を構築WPF + SignalR + Web API + Rx + async/await (etc...)

電話の処理って非同期処理のオンパレード

2013/09/01

Page 73: Async History in .NET

ReactiveProperty Portableかずきさん (@okazuki) と一緒に開発者として参加

Taskベースの非同期検証機能を追加したりと、少しばかり貢献

2013/10/02

https://reactiveproperty.codeplex.com/

Page 74: Async History in .NET

大量の有名人に遭遇2013/11/18 – 2013/11/21

2013 MVP Global Summit Nov

Page 75: Async History in .NET

C#の父:Anders Hejlsberg

Page 76: Async History in .NET

ASP.NETのアーキテクト:Scott Hanselman

Page 77: Async History in .NET

GitHubの中の人:Phil Haack

Page 78: Async History in .NET

SignalRの作者:Damian Edwards

Page 79: Async History in .NET

赤シャツ副社長:Scott Guthrie

Page 80: Async History in .NET

C#/VBチームの非同期担当:Lucian Wischik

Page 81: Async History in .NET

ReactiveSignalRSignalR の少し面倒な記述を Rx を使って楽に

GitHub / NuGet で絶賛公開中!!

2014/01/02

http://xin9le.net/articles/117http://www.slideshare.net/xin9le/reactivesignalr

Page 82: Async History in .NET

非同期勉強会2014/05/10

Page 83: Async History in .NET

Enjoy Asynchronous!!

Thank you

Page 84: Async History in .NET

For your good experience.

Asynchronous