タグ

非同期に関するmsuharaのブックマーク (5)

  • [C#5.0~] async/awaitとTask.Runメソッドを用いた非同期処理のメモ

    こんにちはー、ニアです! 記事では、C# 5.0で追加された async / await とTask.Runメソッドを用いた非同期処理の流れをメモとして載せています。 ※元々この記事は、C#における非同期処理の健忘帳として書いていましたが、この度はコンソールアプリとGUIアプリにおける処理の流れの違いを図も併せてまとめ、記事をリニューアルすることにしました。 1. 非同期処理の作り方 非同期にしたい処理をTask.Runメソッドの引数にデリーゲートとして指定します。Task.Runメソッドにawaitキーワードを付けて、非同期処理が終わるまで後続の処理を待機するようにします。await付きのメソッドを含むメソッドにはasyncキーワードを付けて、戻り値をTask型にします。 ※非同期処理にて、async付きのメソッドの戻り値をTask型にする理由は以下のサイトが参考になります。 asyn

    [C#5.0~] async/awaitとTask.Runメソッドを用いた非同期処理のメモ
    msuhara
    msuhara 2017/08/04
    わかりやすい
  • 非同期メソッド入門 (7) - 内部実装を覗く - xin9le.net

    非同期メソッドはまるで魔法のようです。非同期処理が同期処理とほとんど同じ書き方ができるなんて、もはや革命です。「今まで非同期処理のコーディングに充ててきた時間をすべて返してほしい」とさえ言いたくなるくらいです。けれどそんな素敵な非同期メソッドも、何かカラクリがあってこのような機能になっているはずです。今回はこれを少し紐解いてみましょう。 アプローチ 調査するにもキッカケが何もないとアレなので、以下のような仮定を立てて話を進めます。 async/awaitは何かの糖衣構文で、実際はコンパイラがもっと複雑な形に変換している exeやdllには変換後の形で格納されている C#/VB.NETなどの.NET Framework上で動作する言語は、コンパイルすると中間言語(IL)という形に変換されexeやdllに格納されます。(都合の良いことに)世の中にはexeやdllからILを取り出し、逆コンパイル

    非同期メソッド入門 (7) - 内部実装を覗く - xin9le.net
  • async/awaitと同時実行制御

    C# 5.0のasync/awaitを使うと、多くの場面ではシングル スレッド的な動作になるし、多くの場面ではlock不要(結果的に、デッドロックが起こりようなくなる)になったりします。 ただし、「多くの場面で」。「必ず」ではないのがはまりどころ。いくつかの場面では、同時実行制御が必要です(普通にマルチスレッドの平行実行になるので、同時に同じデータにアクセスされる可能性を考慮しないとバグります)。 前提知識 いくつか、C# 5.0世代の非同期処理についての前提知識は、以下のスライド(先月末の.NETラボでの発表)を参考にしてください。 5~12ページ: async/awaitの書き方 17~22ページ: スレッドとそのコスト 24~26ページ: スレッド プール 29~32ページ: I/O完了待ちと非同期API 36~40ページ: UIスレッドとディスパッチャー 41~45ページ: 同期コ

    async/awaitと同時実行制御
    msuhara
    msuhara 2017/08/01
    シーケンス図があってわかりやすい
  • async/await ~非同期なライブラリは楽じゃない~ - 飽きっぽい人のブログ

    ※個人的な備忘録的なものです。 こっちとかこっちのが良くまとめられています。 ライブラリ制作者向けの内容になっているのでアプリ製作者にはあまり関係がないかもしれません なお、サンプルコードは全てWindowsストアアプリとして実行したものとします デッドロックで泣きを見ないように 下のようなライブラリのコードがあるとします gist11215254 このライブラリのDoAsyncは呼び出され方によってはデッドロックされてしまいます 下のコードがその例になります gist11215568 原因はTaskのWaitメソッドでロックしたスレッドに対して、HeavyWorkAsyncメソッドでワーカースレッドで作業していたTaskが元のUIスレッドに戻ろうとしたためです 図にすると以下のようになります Waitするなと思った方がいらっしゃるかもしれませんが、使用するのは自分ではなく他人のアプリ製作

    async/await ~非同期なライブラリは楽じゃない~ - 飽きっぽい人のブログ
  • TAP (Task-based Asynchronous Pattern) 非同期メソッドのガイドライン - Qiita

    Task-based Asynchronous Pattern (TAP) と呼ばれる、最新の .NET Framework で推奨される非同期メソッド実装におけるデザインガイドラインをまとめました。にわかなのでマサカリ歓迎します。 Async および Await を使用した非同期プログラミング (C# および Visual Basic) も参照してください。 また、下記では .NETで非同期ライブラリを正しく実装する の内容を踏まえています。 メソッド名は ~Async もしくは ~TaskAsync とする 非同期操作を実行するメソッドは名前に Async サフィックスをつけます。 もし既に Async で終わる Task を返却しない同名メソッド(IAsyncResult などを返すメソッド)が存在している場合は TaskAsync とします。 TAP の非同期操作は、操作名の後に

    TAP (Task-based Asynchronous Pattern) 非同期メソッドのガイドライン - Qiita
  • 1