タグ

非同期に関するa-hamahamaのブックマーク (18)

  • Taskを極めろ!async/await完全攻略 - Qiita

    この記事は、 Task.Runを書けばとりあえず非同期で動くのはわかる 時々なんかうまく動かなかったりするけどどうして動かないのかはよくわからない よくわからないまま書いてよくわからないまま動いてるけどこれで大丈夫なのかわからなくてこわい みたいな人を対象にしています。 Taskクラスとasync/await 皆さん、非同期してますか?当然してますね。同期処理が許されるのはC#2.0までだよねーじゃなくて、async/awaitはC# 5.0から導入された、Taskクラスと紐付いた言語構文の一つです。登場はもう数年前なはずなんですが、未だに新しい言語仕様な感じがしてフシギです。それでもさすがに今は馴染んでいて、どこにでも遠慮なく飛び出てくるようになっています。 Taskの難しさ Taskは、難しいです。 Taskがというよりは、非同期処理自体が持つ複雑さが根に存在するため、いくらシンプル

    Taskを極めろ!async/await完全攻略 - Qiita
  • 【C#】async/awaitのキャンセル処理まとめ - Qiita

    はじめに C#におけるasync/awaitを使う上で、絶対に意識しないといけないものは「キャンセル処理」です。 正しく処理をキャンセルしないとメモリリークを起こしたり、デッドロックやデータ不整合を引き起こす可能性があります。 今回はこの「async/awaitにおけるキャンセル処理」について話します。 対象 C#におけるasync/await全般 Task/ValueTask/UniTaskすべてに共通します Unity含む C#のasyc/awaitについてイマイチ自信が持ててない人 先に「結論」 asyncメソッドはCancellationTokenを引数に取るべき await対象が引数にCancellationTokenを要求する場合は省略せずに渡すべき OperationCanceledExceptionの取り扱いを意識するべき 解説 そもそも「キャンセル」とは何を指すのか そも

    【C#】async/awaitのキャンセル処理まとめ - Qiita
  • JavaScript入門: 基礎知識をGIFアニメで分かりやすく解説 -総まとめ

    JavaScript QuestionsのLydia Hallie氏の「JavaScript Visualized」シリーズすべての翻訳を完了したので、まとめて紹介します。 JavaScriptエンジンの仕組みをはじめ、イベントループ、スコープチェーン、プロトタイプ継承、非同期処理、ジェネレータ関数、Hoisting(巻き上げ)など、GIFアニメを使用して詳しく解説しています。 シリーズ7すべてと、プラス1として楽しく学べるクイズもあります。 JavaScript イベントループの仕組み JavaScriptでエラーの原因となるHoisting(巻き上げ)の仕組み JavaScriptのスコープチェーン・変数参照の仕組み JavaScriptエンジンの仕組み JavaScript プロトタイプ継承の仕組み JavaScriptのジェネレータ関数とイテレータの仕組み JavaScript

    JavaScript入門: 基礎知識をGIFアニメで分かりやすく解説 -総まとめ
  • 非同期: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) - 鷲ノ巣
  • Windowsの非同期I/Oと、OVERLAPPED構造体の寿命 - 技術ブログ読み日記

    The Old New Thingの「Ready... cancel... wait for it! (part 2)」を読んだ。 この記事の結論はこうだ。 I/O完了ルーチンを使う場合、OVERLAPPED構造体はI/O完了ルーチンの実行が終わるまで解放してはならない。一般的には、OVERLAPPED構造体をスタックではなくヒープに割り当て、I/O完了ルーチンの最後で破棄するようにする。 普通そうするだろ、という話は置いておいて。 part1の復習 なんでこんなことを問題にしているんだろう? と不思議に思ったが、この記事は以下のような少し特殊なケースを前提にしているように思う。 したいことは、タイムアウトつきのブロッキングI/Oを行う関数を作ること。 タイムアウトしたときのキャンセルを可能にするために、非同期I/Oを使う。 関数は、I/Oが成功、失敗、タイムアウトのいずれかで抜ける。I/

    Windowsの非同期I/Oと、OVERLAPPED構造体の寿命 - 技術ブログ読み日記
  • データバインディングと非同期 – C# Advent Calendar 2014 – kekyoの丼

    この記事は、「C# Advent Calendar 2014」の21日目の記事です。 WPFやWindows Phoneやストアアプリでは、Windows Formsのような「コードビハインド」による実装の他に、「データバインディング」を積極的に使う実装を行う事が出来ます。というよりも、データバインディングという手法を使わないと、複雑なUIを表現するのが困難です。この記事では、その辺りと非同期がどう関係するのかを書いてみたいと思います。 (なお、例はWPFですが、ストアアプリでもほぼ同様です) データバインディングって何? そもそもデータバインディングとは、どういう手法でしょうか? Windows Formsの時代、データバインディングと言うと「DataSet」クラスの内容を、「DataGridView」コントロールを使って表示させるという用途が一般的でした。 詳しい解説は「Windows

    データバインディングと非同期 – C# Advent Calendar 2014 – kekyoの丼
  • 続 非同期処理の戻り値をまとめて待ちたい - プログラムの事とか

    昨日の続きです。 var numbers = new[] { 2, 4, 6, 9 }; var resultList = new List<bool>(); foreach (var task in numbers.Select(IsEven).ToArray()) { resultList.Add(await task); } Console.WriteLine($"Even {resultList.Count(r => r)}, Odd {resultList.Count(r => !r)}"); が美しくなかったんで頑張んばりました。 Task.WaitAllの存在は知っていたのですがこれは戻り値が無いTask用で、なんでTask<Result>は対応してないんだよー、とVisual Studioで定義を見てみたら・・・ すぐ下にあった!! Visual Studioの定義を表示が

    続 非同期処理の戻り値をまとめて待ちたい - プログラムの事とか
  • TPL入門 - xin9le.net

    .NET Framework 4.0で搭載されたタスク並列ライブラリについての連載インデックス インデックス はじめに データの並列化 単純なループ 挙動の観察 ループの中断/停止 スレッドローカル変数 例外処理 ループの取り消し タスクの並列化 タスクの実行 完了の待機と結果の取得 タスクの継続 入れ子タスクと子タスク タスクの例外処理 タスクのキャンセル タスクの状態 UIコンポーネントの操作 おわりに 落ち穂拾い 以前の並列処理 スレッドプールの挙動 長いタスクの明示 非同期メソッド 進捗通知 Hokuriku.NET C# -TPL入門- ハンズオン資料

    TPL入門 - xin9le.net
  • 非同期メソッド入門 - xin9le.net

    .NET Framework 4.5 / C# 5.0 から提供された非同期メソッドについての連載インデックス インデックス 非同期処理の歴史 非同期メソッドの概要 async修飾子とawait演算子 任意の記述場所 UIスレッドとの同期 戻り値 例外処理 非同期メソッドの内部実装 内部実装を覗く コンパイラ要件 Awaitableパターンの自前実装 WinRTとの相互運用 Rxとの相互運用 落ち穂拾い NET Framework 4.5以外でawaitする コンパイラ要件違反 単体テストの記述方法 機械的読み替えに注意 非同期勉強会 / Community Open Day 2012 その他の資料/動画 非同期勉強会 資料 Community Open Day 2012 資料 Three Essential Tips for Async @ITでの連載

  • neue cc - asyncの落とし穴Part3, async voidを避けるべき100億の理由

    だいぶ前から時間経ってしまいましたが、非同期の落とし穴シリーズPart3。ちなみにまだ沢山ネタはあるんだから!どこいっても非同期は死にますからね! async void vs async Task 自分で書く場合は、必ずasync Taskで書くべき、というのは非同期のベストプラクティスで散々言われていることなのですけれど、理由としては、まず、voidだと、終了を待てないから。voidだと、その中の処理が軽かろうと重かろうと、終了を感知できない。例外が発生しても分からない。投げっぱなし。これがTaskになっていれば、awaitで終了待ちできる。例外を受け取ることができる。await Task.WhenAllで複数同時に走らせたのを待つことができる。はい、async Taskで書かない理由のほうがない。 んじゃあ何でasync voidが存在するかというと、イベントがvoidだから。はい。b

  • タスク並列ライブラリ入門記-000 (事始め, 殴り書きメモ) - いろいろ備忘録日記

    .NET 4.0から追加された「タスク並列ライブラリ(以下TPLと記述)」についての メモを書いていこうと思ってます。 忘れやすいので、自分のために殴り書きメモを以下に記述。(超見づらいです・・すみません) この内容をまとめていろいろ記述していこうと思っているところ。 リソースとしては タスク並列ライブラリ(TPL)についてのリソース (Task Parallel Library, Parallel.For, Thread, ThreadPool, 非同期, 並列) http://d.hatena.ne.jp/gsf_zero1/20110210/p1 でピックアップした、各記事を元に勉強していこうと思ってます。 元の記事はどれも素晴らしいです。 以下、MSDNのメモ書き。 タスク並列ライブラリとは、1つまたは複数のタスクを同時に実行することを可能とするライブラリ。 データの並列化:Par

    タスク並列ライブラリ入門記-000 (事始め, 殴り書きメモ) - いろいろ備忘録日記
  • 並列処理における UI コントロールの操作

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

  • [.NET Framework 4/4.5][C# 5] 非同期で動くビジネスロジックを作る - biac の それさえもおそらくは幸せな日々@nifty

    C# Advent Calendar 2011 参加記事 「Win8 に備えて async / await を勉強してみよう」 で書いたように、 async / await が使えれば非同期処理のコーディングがあっさり出来てしまいます。 たとえば今まで 3秒も掛かっていた UI のイベントハンドラーに async / await を付けるだけで、 ほぼ 0秒で応答が返ってくるようになります (画面が書き換わるのは、 やっぱり 3秒後ですけど)。 ※ ユニットテストのコードでイベントハンドラーの雰囲気を出してみた。 ※ 「LongTimeMethodTest_既存のUIのイベントハンドラーの例だと思ってほしい」は、実行に 3秒。 ※ 「LongTimeMethodAsyncTest_UIのイベントハンドラーはこんな感じになる」の方は、0mS (1ミリ秒掛かっていない)。 こういう嬉しいことが

    [.NET Framework 4/4.5][C# 5] 非同期で動くビジネスロジックを作る - biac の それさえもおそらくは幸せな日々@nifty
  • 非同期処理の基礎

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

    非同期処理の基礎
  • Windows 8のC++でプログラミングの常識がひっくり返った

    「C言語とC++がわかる」というムック(2013年4月2日発売)の作業で、Windows 8/RTで動く「Windowsストア アプリ」をC++で作った。元記事はVisual BasicとC#(シーシャープ)で作っていたので、それをC++で書き直すというわけだ。 これが想像をはるかに超えて難しく、土日に働き続けるのはもちろんのこと、1日の睡眠時間を2時間に削ったりして長時間取り組んでも、思うように進まなかった。印刷会社にデータを渡す日は近付くしプログラムは動かないしで、10年に1度クラスの大ピンチ。冷や汗をかき、涙目になりながら書き続けて何とか間に合わせたのだが、どこが最大の難所だったかというと、「順次処理を書いたつもりなのに順次処理してくれない」という、常識破りの大変化があったことだと思う。 手続き型のプログラミング言語でプログラムを書く場合、プログラマが と記述したら、コンピュータは

    Windows 8のC++でプログラミングの常識がひっくり返った
  • 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と同時実行制御
  • .NET開発者のための非同期入門 フリーズしないアプリケーションの作り方 - @IT

    連載目次 「エンド・ユーザーは、0.5秒のフリーズでストレスを感じ、3秒のフリーズはバグだと思う」。昔、冗談半分に言ってみた言葉だが、回りの反応を見るに、割とみな思っていることらしい。 特にモバイル端末向けのOSでは、応答性の悪いアプリケーションはOSによって強制終了されたり、マーケットプレイスでの審査に落ちたりする。フリーズしないアプリケーション作りがますます重要になっている。 そこで、稿では、フリーズしないアプリケーション作りに必要となる「非同期処理」*1について説明していく。 *1 時間のかかるAPIに対して、そもそも非同期版しか提供しないケースが増えてきている。Windows 8の新しいWindows API(WinRT)では、50ミリ秒以上かかるAPIを、すべて非同期なメソッドとして提供するそうだ。 ■非同期処理の今までとこれから ネットワークI/Oのように待ち時間の発生する処

    .NET開発者のための非同期入門 フリーズしないアプリケーションの作り方 - @IT
  • 1