async history in .net

Post on 24-May-2015

4.940 Views

Category:

Technology

6 Downloads

Preview:

Click to see full reader

DESCRIPTION

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

TRANSCRIPT

非同期勉強会

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

Name

鈴木孝明

Twitter Account

@xin9le

Award

Microsoft MVP for Visual C#

Web Site

http://xin9le.net

About Me

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

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

書き方がかなり煩雑

BeginXxxEndXxx

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

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

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

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.8async/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.9Rxで簡単に実現できるサンプルの紹介

「そう、Rxならね」

2012/03/10

http://atnd.org/events/24756

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

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

2012/06/09

http://atnd.org/events/28159

MVP Award 初受賞2012/07/01

Microsoft MVP for Visual C#

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

地元企業向けに非同期勉強会を開催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#

業務で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

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

GitHub / NuGet で絶賛公開中!!

2014/01/02

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

非同期勉強会2014/05/10

Enjoy Asynchronous!!

Thank you

For your good experience.

Asynchronous

top related