Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Async History in .NET

7,152 views

Published on

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

Published in: Technology
  • Be the first to comment

Async History in .NET

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

×