タグ

非同期とスレッドに関するa-hamahamaのブックマーク (5)

  • 非同期:awaitを含むコードをロックするには?(SemaphoreSlim編)[C#、VB]

    async修飾子/await演算子(VBではAsync修飾子/Await演算子、以降は「async/await」と略す)によって、非同期プログラミングは簡潔に記述できるようになった。ところが、複数スレッド間の排他ロックを実現するために使ってきたlockステートメント(VBではSyncLockステートメント)が、await演算子(VBではAwait演算子、以降は省略)を含むコードでは使えなくなってしまったのである。async/awaitを多用するコード(特にWindowsストアアプリやWindows Phoneアプリ)を書いていて困った経験を持つ人も多いだろう。await演算子を含むコードをロックするにはどうしたらよいのだろうか? 稿では、SemaphoreSlimクラス(System.Threading名前空間)を使う方法を説明する。 従来のlock/SyncLockステートメントによる

    非同期:awaitを含むコードをロックするには?(SemaphoreSlim編)[C#、VB]
  • async/await と SynchronizationContext (2) - 鷲ノ巣

    前回は SynchronizationContext の説明だけで async/await に絡んだ話が出来ませんでした。 今回はその続きになります。 まずは復習。 以前の記事で詳しくやりましたが、async/await は、以下のような特徴を持つ非同期処理の方式です。 コード上に明示的にコールバック関数が現れない ほとんど同期処理と似た見た目を実現できる コールバック関数が見当たらないのは、メソッドを分割して、自分自身をコールバック関数にしているからでしたね。 さて、同期処理とほとんど同じように書けるというからには、前回やった APM のように、現在のスレッドが UI スレッドなのかワーカー スレッドなのかを気にするようではいけません。 というわけで、当然ながら SynchronizationContext が一枚噛んでいて、「いい感じ」に処理されるようになっています。 以前のコードを再

    async/await と SynchronizationContext (2) - 鷲ノ巣
  • 並列処理における UI コントロールの操作

    Last Updated 2011/09/21 並列処理のサンンプルコードはほとんどがコンソールアプリケーションです。しかし、私はコンソールアプリケーションを好みません。したがって、並列処理において UI コントロールにアクセスする手順は私にとってもっとも重要なテーマの一つです。 並列処理において、UI コントロールにアクセスしなければならないケースとは次の 2 つだと思います。 処理結果を UI コントロールに反映する 処理を中止する 「処理結果を UI コントロールに反映する」とは、結果をテキストボックスに表示するとか、処理の進捗状況をプログレスバーに表示するなどが考えられます。「処理を中止する」は処理の対象のデータの入力に不都合があって処理自体が不要になる場合とか、予想より処理時間が長くなりそうなので、途中で中止する場合です。この場合はボタンコントロールをクリックすることで中止の意図

  • 非同期処理の基礎

    MPAなWebフレームワーク、Astroの紹介 (その1) 2024/05/17の勉強会で発表されたものです。

    非同期処理の基礎
  • 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と同時実行制御
  • 1