xin9le.net

Microsoft の製品/技術が大好きな Microsoft MVP な管理人の技術ブログです。

Async

非同期メソッド単位で値を保持/提供するAsyncLocal<T>

2015/07/20 深夜、ついに Visual Studio 2015 が正式リリースされました。同時に .NET Framework も 4.6 にバージョンアップ。以下の記事にもある通り、関連の言語やライブラリも数多く更新されています。 Announcing .NET Framework 4.6 .NET 4.6 (@mataril…

IAsyncDisposableについて考えてみた

Visual Studio 2015 も RC (= リリース候補版) となり、C# 6.0 も Go-Live となりました。言語チームは Roslyn という大物の開発に注力していたため、C# 6.0 は細かな使い勝手の向上を中心とした比較的小規模な機能追加となっています。詳細は以下をご覧いた…

.NET Framework 4.5.3でのTask型への機能追加

しばらく前になりますが、2014/10/6 に Visual Studio 14 CTP 4 がリリースされました。そのリリースの中で .NET Framework も更新され、バージョン 4.5.3 となりました。少し触っていたら、Task 型 (System.Threading.Tasks 名前空間) に新しいプロパティと…

非同期勉強会 資料

2014年5月10日 (土)、VSハッカソン倶楽部さん主催の非同期勉強会に参加/登壇してきました。大阪に行くのは3月に開催されたRoom metro #23以来、2カ月ぶり2回目。このように呼んで頂けるのは大変ありがたいことです。参加者が70人近くと大盛況だった上に自分…

ThreadPool監視のすゝめ

先日7月20日、@neueccさんがASP.NETでの定期的なモニタリング手法ということで、Webアプリケーションの状況把握のためにThreadPoolのスレッド数を監視をしていると書いておられました。社内システムとはいえリアルタイムアプリケーションでThreadPool使いま…

非同期メソッド入門 (15) - 機械的読み替えに注意

async/awaitの挙動は非同期ですが、見た目はほぼほぼ同期的なコードと同じです。コードの可読性がこれまでとは桁違いに良くなるので、例えば既存プロジェクトを.NET Framework 4から.NET Framework 4.5に切り替えた場合などに既存のコードをasync/awaitで置…

Hokuriku.NET × WCAF 資料

2013年4月13日(土)に行われた「Hokuriku.NET × WCAF」に参加してきました。北陸のプログラマーとデザイナーで集まって交流しましょうというのが目的でした。色彩のお話とか整列/配列のお話などなど、「美しく、訴求力のあるデザイン」にするための方法を理論…

非同期メソッド入門 (14) - 単体テストの記述方法

近年の開発では単体テストがとても重要視されています。Visual StudioやTeam Foundation Serverなどの進化を見ても、それが良く出ています。人によっては「テストコードがないプログラムなんて...」とか、「テスト書かないでコード書くなんて信じられない」…

非同期メソッド入門 (13) - コンパイラ要件違反

以前、非同期メソッド入門 (8) - コンパイラ要件と非同期メソッド入門 (9) - Awaitableパターンの自前実装で独自型のawaitの方法を紹介しました。TaskCompletionSource<T>という強力な助っ人もいることもあり、実際どれほど独自実装をするケースがあるのかは本</t>…

非同期メソッド入門 (12) - .NET Framework 4.5以外でawaitする

async/awaitはC# 5.0で搭載されたキーワードです。このキーワードを使ったコードのコンパイルを通すには、Visual Studio 2012で.NET Framework 4.5をターゲットとする必要があります。ここまでの連載は、すべてそう設定されていることを前提として紹介してき…

非同期メソッド入門 (11) - Rxとの相互運用

Rx (=Reactive Extensions) は、イベントや非同期処理をLINQの形で統一的に記述できる準標準 (=.NET Frmaeworkに標準搭載されていないMicrosoft純正の) ライブラリです。これまでRxは.NET Framework 3.5 / .NET Framework 4環境下では非同期処理をするための…

非同期メソッド入門 (10) - WinRTとの相互運用

今回はWindows 8に新しく搭載されたAPI、WinRT (=Windows Runtime) との相互運用性について見ていきます。WinRTはMetroスタイルアプリケーションを作るためのAPIで、これまでのWin32 APIとはかなり毛色が違い、オブジェクト指向なAPIに生まれ変わっています…

非同期メソッド入門 (9) - Awaitableパターンの自前実装

前回はawaitするためのコンパイラ要件について確認しました。コンパイラは独自型をawaitするための汎用性を残した展開を行います。ここでは実際にAwaitableな型を自前実装してみます。 Awaitableパターンの実装 Awaitable型 まずawait演算子に渡すAwaitable…

非同期メソッド入門 (8) - コンパイラ要件

前回は非同期メソッドの内部実装/展開のされ方を追いかけてみました。(当然ですが)コンパイラは一定の規約に沿ってこのような変換を行います。前回の内容を思い出しながら、非同期メソッドにするためのコンパイラ要件を見て行きましょう。 Awaitableになるた…

非同期メソッド入門 (7) - 内部実装を覗く

非同期メソッドはまるで魔法のようです。非同期処理が同期処理とほとんど同じ書き方ができるなんて、もはや革命です。「今まで非同期処理のコーディングに充ててきた時間をすべて返してほしい」とさえ言いたくなるくらいです。けれどそんな素敵な非同期メソ…

非同期メソッド入門 (6) - 例外処理

ここまで、非同期メソッドの基本的な使い方について見てきました。概要の最後として、例外処理の書き方を見ておきましょう。 通常と同じ記述の例外処理 実は下に示すように、例外処理についても同期コードとほぼほぼ同じ書き方で対応することができます。こ…

非同期メソッド入門 (5) - 戻り値

これまであまり意識して来ませんでしたが、非同期メソッドにももちろん戻り値は必要です。戻り値には以下のいずれかを指定します。 void型 通常のメソッド同様、非同期メソッドでもreturn文を書かない場合には戻り値にvoidを指定できます。戻り値にvoidを指…

非同期メソッド入門 (4) - UIスレッドとの同期

非同期メソッド入門 (2) - async修飾子とawait演算子でも簡単に書きましたが、await以降の処理はコンパイラによって継続渡しという形に変換されます。そのときのサンプルを再掲します。 private async void Button_Click(object sender, RoutedEventArgs e) …

非同期メソッド入門 (3) - 任意の記述場所

async修飾子やawait演算子は、前回紹介したサンプルのような利用箇所に留まりません。適用可能箇所は以下の通りです。 キーワード 適用できる箇所 適用できない箇所 async修飾子 通常のメソッドラムダ式匿名メソッド コンストラクタデストラクタ await演算子…

非同期メソッド入門 (2) - async修飾子とawait演算子

非同期メソッドを実装する上で必要なキーワードはasync修飾子とawait演算子のふたつです。まずはこれらを押さえておきましょう。 ※今回の内容はTPL入門(20) - 非同期メソッドの繰り返しです。ごめんなさい... async修飾子 async修飾子はメソッド内でawait演…

非同期メソッド入門 (1) - 非同期処理の歴史

非同期メソッドを学ぶにあたり、簡単に.NET Frameworkがこれまで提供してきた非同期処理について復習しておきましょう。図示すると大体以下のような感じだと思います。 以下、これらについてコードを交えながら簡単に見ていきます。 UIスレッド上で処理する…

非同期メソッド入門

.NET Framework 4.5 / C# 5.0 から提供された非同期メソッドについての連載インデックス

Community Open Day 2012 資料

Community Open Day 2012の北陸会場で発表したときの資料を公開します。以前から個人的に気になっていた非同期メソッド (async/await) の内部実装について追いかけてみた、というプログラマー的自己満足系の内容になっていますw 当日はMicrosoftのEvangelist…

Hokuriku.NET vol.8 資料

Hokuriku.NET vol.8のLTで喋らせて頂いたときの資料を公開します。準備不足でミスってたところがあったので、ちょこっとだけ手直ししてあります。興味を持たれた方は、内容は大したことないですが覗いてみてください。基本的にはTPL入門(21) - 非同期メソッ…