VSUG DAY – Summer
 ( 2012.06.16 )

“ なめらか”な
    メトロスタイルアプ
リを
        作るために
~ WinRT の非同期性を活用したアプリ開発
~      青柳 臣一
自己紹介



                  Twitter: @ShinichiAoyagi
           ブログ : http://shinichiaoyagi.blogspot.jp/



       仕事                           職場            自宅
   ソフトウエア開発
                                     大阪           大阪
  WPF 、 Silverlight 、               淀屋橋           吹田
      C# 、 VB 、




                  VSUG DAY - Winter 2012.06.16
“ なめらか”

• タッチ
 – マウス以上に遅延に敏感になる


• フィードバック
 – HDD のアクセスランプ


• メトロスタイルアプリのライフサイクル
 – 起動→サスペンド→再起動→…


          VSUG DAY - Winter 2012.06.16
非同期

• WinRT では多くの API が非同期
 – 50ms 以上かかる API は基本的に非同期
 – 非同期メソッドがある場合は同期版は無し


• 非同期メソッドは末尾に “ Async”
 – ファイル作成
   • StorageFolder.CreateFileAsync()
 – ファイル検索
   • StorageFolder.CreateFileQuery() のあと
     GetFilesAsync()
               VSUG DAY - Winter 2012.06.16
Asynchronous / Await

• Asynchronous
  – 発音記号 eɪ síŋkrənəs
  – 「エイシンクロナス」
  – 日本での発音は「アシンクロナス」が一般的
    ?
• Await
  – 発音記号 əwéɪ t
  – 「アウエイト」


• 今日は「アシンクロナス」
                VSUG DAY - Winter 2012.06.16
サンプル (1)




           VSUG DAY - Winter 2012.06.16
サンプル (2)




• async/await を使うと簡単すっきり




           VSUG DAY - Winter 2012.06.16
async / await

• 魔法ではない
  – C# / VB コンパイラががんばってコードを作
    っている
  – 詳細は C# Language Specification 5.0 に記
    載(たぶん、きっと)
     • 今は以下にあり
     • 「 C# Language Specification for Asynchronous Functions 」
       http://www.microsoft.com/en-us/download/details.aspx?id=23753




                      VSUG DAY - Winter 2012.06.16
自作 Async メソッド

• async メソッドの戻り値
 – void 、 Task 、 Task<T> のいずれかのみ




           VSUG DAY - Winter 2012.06.16
キャンセル / 進捗

• キャンセル
 – CancellationToken と
   CancellationTokenSource


• 進捗
 – IProgress<T>




              VSUG DAY - Winter 2012.06.16
async / await の注意点 (1)

• await から下はあくまで非同期
  – 見た目にだまされるとまずい
  – ときにはきちんとロックが必要かも
  – ローカル変数なら(ほぼ)安心
    • けど、魔法みたいになっちゃうことも




              VSUG DAY - Winter 2012.06.16
async / await の注意点 (2)

• await 後は必ず UI スレッドに返ってくる
  – 必要ないときは
   await XxxAsync()
    .ConfigureAwait(continueOnCapturedContext:false);

   await XxxAsync().ConfigureAwait(false);




                 VSUG DAY - Winter 2012.06.16
ご清聴ありがとうございました




   VSUG DAY - Winter 2012.06.16

“なめらか”なメトロスタイルアプリを作るために ~WinRT の非同期性を活用したアプリ開発~

  • 1.
    VSUG DAY –Summer ( 2012.06.16 ) “ なめらか”な     メトロスタイルアプ リを         作るために ~ WinRT の非同期性を活用したアプリ開発 ~ 青柳 臣一
  • 2.
    自己紹介 Twitter: @ShinichiAoyagi ブログ : http://shinichiaoyagi.blogspot.jp/ 仕事 職場 自宅 ソフトウエア開発 大阪 大阪 WPF 、 Silverlight 、 淀屋橋 吹田 C# 、 VB 、 VSUG DAY - Winter 2012.06.16
  • 3.
    “ なめらか” • タッチ – マウス以上に遅延に敏感になる • フィードバック – HDD のアクセスランプ • メトロスタイルアプリのライフサイクル – 起動→サスペンド→再起動→… VSUG DAY - Winter 2012.06.16
  • 4.
    非同期 • WinRT では多くのAPI が非同期 – 50ms 以上かかる API は基本的に非同期 – 非同期メソッドがある場合は同期版は無し • 非同期メソッドは末尾に “ Async” – ファイル作成 • StorageFolder.CreateFileAsync() – ファイル検索 • StorageFolder.CreateFileQuery() のあと GetFilesAsync() VSUG DAY - Winter 2012.06.16
  • 5.
    Asynchronous / Await •Asynchronous – 発音記号 eɪ síŋkrənəs – 「エイシンクロナス」 – 日本での発音は「アシンクロナス」が一般的 ? • Await – 発音記号 əwéɪ t – 「アウエイト」 • 今日は「アシンクロナス」 VSUG DAY - Winter 2012.06.16
  • 6.
    サンプル (1) VSUG DAY - Winter 2012.06.16
  • 7.
    サンプル (2) • async/awaitを使うと簡単すっきり VSUG DAY - Winter 2012.06.16
  • 8.
    async / await •魔法ではない – C# / VB コンパイラががんばってコードを作 っている – 詳細は C# Language Specification 5.0 に記 載(たぶん、きっと) • 今は以下にあり • 「 C# Language Specification for Asynchronous Functions 」 http://www.microsoft.com/en-us/download/details.aspx?id=23753 VSUG DAY - Winter 2012.06.16
  • 9.
    自作 Async メソッド •async メソッドの戻り値 – void 、 Task 、 Task<T> のいずれかのみ VSUG DAY - Winter 2012.06.16
  • 10.
    キャンセル / 進捗 •キャンセル – CancellationToken と CancellationTokenSource • 進捗 – IProgress<T> VSUG DAY - Winter 2012.06.16
  • 11.
    async / awaitの注意点 (1) • await から下はあくまで非同期 – 見た目にだまされるとまずい – ときにはきちんとロックが必要かも – ローカル変数なら(ほぼ)安心 • けど、魔法みたいになっちゃうことも VSUG DAY - Winter 2012.06.16
  • 12.
    async / awaitの注意点 (2) • await 後は必ず UI スレッドに返ってくる – 必要ないときは await XxxAsync() .ConfigureAwait(continueOnCapturedContext:false); await XxxAsync().ConfigureAwait(false); VSUG DAY - Winter 2012.06.16
  • 13.
    ご清聴ありがとうございました VSUG DAY - Winter 2012.06.16