タグ

ブックマーク / www.kekyo.net (6)

  • .NET非同期処理(async-await)を制御する、様々な方法

    async-awaitベースの非同期処理を制御する方法をまとめました。コードはわざと冗長に書いています。 概要: Taskベースのワーカースレッド生成 他の非同期I/Oと連携してタスクを制御する方法 TaskとLINQを応用して、多量の計算を安全に並列実行させる方法 Taskを使っていない非同期処理をTask化する方法 非同期処理のキャンセルの実現方法 WinRT・ユニバーサルWindowsアプリケーション(UWP)での非同期処理とTaskの連携方法 読む前に補足 C#でTaskやasync-awaitを使った非同期処理の書き方を探しているのであれば、ポイントに絞って書いた、こちらの記事をお勧めします: 「できる!C#で非同期処理(Taskとasync-await)」 Taskクラスの使用例として、ワーカースレッドを起動するという例が良く挙げられます。記事も最初にTask.Runによるワ

    .NET非同期処理(async-await)を制御する、様々な方法
  • 非同期処理、なにもわからない

    最近のお仕事で、C#の非同期処理の書き方が分からずに、溶岩地帯に自爆していくコードを沢山みるようになったので、ケースとして日常風の記事にしてみました。 どんな風にハマってしまい、どうやって解決するのかが分かると思います。 結論 先に書いておきます。 Task.Run()を使ってはいけません Task.Result, Task.Wait()を使ってはいけません Threadクラスを使ってはいけません async-await構文だけを使って書きます async voidにするのは特殊な場合だけです がんばれー、わかってしまえば難しくない! 補足: もしあなたがJavaScriptで非同期処理を書いた事があるなら、その知識をそのまま生かせます。 JavaScriptではTaskの代わりにPromiseを使いますが、Promiseには上記1,2,3は存在しません。しかし、それで困ることはありません

    非同期処理、なにもわからない
  • 技術解説 – 非同期

    .NETの世界での「非同期」とは、非同期処理(主に非同期I/O)を効率よく、しかも最小のプログラミングコストで実現するため、コンパイラとライブラリの補助で実現する機能の事です。C#やVB.netにおいて、「async-await」キーワードを使って、ほぼ従来通りのフローコーデイングを実現可能で、コンパイラが自動的に複雑なステート管理に展開してくれるため、人的なエラーを起こしにくく、コード量も飛躍的に削減出来ます。 これまでの非同期処理のセオリーは、プロセスレベルやスレッドレベルで、いわゆる「ワーカープロセス・スレッド」を使ってオフロード処理する方法が主流でした。この方法の問題点は、メインの処理とワーカーとの間で行わなければならない同期処理や、ワーカー処理がI/Oのブロッキングを保持するためだけにCPUリソースを消費(プロセスやスレッドを使う)してしまう事でした。.NETの非同期処理は、非同

    技術解説 – 非同期
  • できる!C#で非同期処理(Taskとasync-await)

    ヤヴァいタイトル付けてしまった…. ええと、これはAdvent Calendarではありませんが、勢いで書いています(C# ADは既に埋まっていた…) それには、こんな事情があったのです: 「.NET非同期処理(async-await)を制御する、様々な方法」の記事がコンスタントにPVを稼いでいる (その割に、他の非同期関連の記事は読まれない)。 asyncやawaitキーワードの使い方を度々聞かれる。 Task.Wait()とか、Task.Resultとか使ってるコードを頻繁に見る(不要なのに! しかも、この記事を参照しながら全部Wait()とかResultしているブログ記事… そしてそこから流入するPV… 死んじゃう、死んじゃうよ…)。 Task.Run()とか、Task.Factory.StartNew()とか、Task.Start()とか、Task.ContinueWith()を使

    できる!C#で非同期処理(Taskとasync-await)
    ryskosn
    ryskosn 2020/01/28
  • パターンマッチングの面白さを見る

    ツイッターのTL見ていると、徐々にC# 7の話題が出てきています。C# 7でパターンマッチングが導入されるとか(まだ範囲は確定してません)。そんなわけで、「パターンマッチング」で面白いと感じた事を書いてみます。 次期C# 7: 型に応じた分岐や型の分解機能、パターンマッチング – Build Insider https://t.co/f437g3nArE @BuildInsiderさんから — ++C++; // 管理人: 岩永 (@ufcpp) 2016年3月15日 C# 7で導入が検討されている機能については、岩永さんの記事が非常にわかりやすくて良いと思います。是非参照してみてください。 私の場合、時期が微妙にずれているのですが、C# 7ではなくF#でパターンマッチングに触れました。その前にはScalaでほんの少しだけ触れたのですが、結局実用的なコードをほとんど書かなかったこともあって

    パターンマッチングの面白さを見る
    ryskosn
    ryskosn 2016/06/18
  • LINQは本当に強力だ (1) データ加工の究極の道具

    長い間、.NET2.0から知識をアップグレードしていなかったのだが、先日一気に.NET4.0の知識を詰め込んだ。 LINQに触る必要性から、匿名デリゲート・ラムダ式・匿名クラス・式ツリー・拡張メソッドなどを覚えたのだが、はっきり言って今まで勉強を放置してきた事に、激しく後悔している。 「わず嫌い」だったのは、矢継ぎ早に追加される新しい構文に対する抵抗だったような気がする。C++のテンプレート拡張がもめたらしいのも、気持ちはよくわかる。 テンプレートもそうだが、LINQも言語思想の革命と言っても言い過ぎではないぐらいのインパクトがあった。 LINQの何が良いかと言えば、比類なき拡張性だろう。これを支えているのはIEnumerable<T>インターフェイスと、拡張メソッド構文なわけだが、LINQに触ったことが無い人向けに、興味が持てそうな事を書いてみる(但し無保証 :-) まぁ、もう既に「枯

    LINQは本当に強力だ (1) データ加工の究極の道具
  • 1