タグ

ThreadとCsharpに関するraimon49のブックマーク (15)

  • 【C#】C# の async/await は実際にどうやって動いているか。 - ねののお庭。

    はじめに 登壇版 Taskの質 C# のイテレータ async/await Compiler Transform ExecutionContext builder.Start() の重要性 IAsyncStateMachine.MoveNext おわりに はじめに C#er は呼吸するように使っている async/await。 そんな async/await について、先日 Stephen Toub 氏 (.NET の中の人。中心人物の一人。) が How Async/Await Really Works in C# という非常に面白い記事を投稿していました。 この記事では Stephen 氏の記事をベースに、C# において async/await は実際どうやって動いてるの?というお話をしていきます。 以前に C#での非同期メソッドの分析。 という翻訳記事を書いたのですが、元になった記

    【C#】C# の async/await は実際にどうやって動いているか。 - ねののお庭。
  • (C#) async/await を理解する - ネコのために鐘は鳴る

    この記事は Qiita C# Advent Calendar 2021 の5日目の記事です。 はじめに C# で async/await が登場してからずいぶんと時間がたち、モダンな C# においてはほぼ必須となりました。Unity でも UniTask などのライブラリもあり、簡単に非同期処理が書けます。この記事では C# での非同期処理の歴史にも触れつつ async/await の動作原理について書きます。 Unity C# の話を書いた方が需要が高そうなので Unity および UniTask を前提にした説明とコードが多く出てきますが、async/await は C# の言語機能であるため、動作原理自体は .NET でも同じです。非 Unity の文脈では適宜読み替えてください。 また、詳細を完璧に説明するよりもわかりやすさを重視したため、一部正確さを欠いた説明をしています。ご了承

    (C#) async/await を理解する - ネコのために鐘は鳴る
  • 【雑記】イベントの購読とその解除

    概要 C# の event 構文の問題と、その解消方法について説明します。 サンプル https://github.com/ufcpp/UfcppSample/tree/master/Chapters/Event/Observable ポイント イベントには発生側と受取側があって、発生側に受取側を登録する口が必要。 C# の event 構文は、このイベント登録口を作るための構文。 ただ、結構使いにくい。 Reactive Extensions使うのがいいんじゃないかな。 まず、イベントについておさらい。 ↓こういうの。「発生側」と「受取側」を明確に分離するためのパターン。 イベントの概要 event source, observable, event sender, ... など、呼び方はいろいろありますが、流儀や文脈の差であって、だいたい同じものです。 event 構文のおさらい C#

    【雑記】イベントの購読とその解除
    raimon49
    raimon49 2015/01/18
    > 「実行性能を落とさないスレッド安全保証は難しい」
  • 非同期処理の基礎

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

    非同期処理の基礎
    raimon49
    raimon49 2014/05/12
    スレッドよりもタスクキュー。.NETの新実装Interlocked命令も。
  • neue cc - ForEachAsync - 非同期の列挙の方法 Part2

    Part2って、Part1はあったのかというと、うーん、非同期時代のLINQ、かな……?さて、今回はForEachがテーマです。といってもそれってSelect+WhenAllでしょ!「Selectは非同期時代のForEach」って言ってたじゃない、というと、はい、言ってました。まだ他に言うことあるの?というと、例えば以下のシチュエーション。 var httpClient = new HttpClient(); var tasks = Enumerable.Range(1, 100000) .Select(async x => { var str = await httpClient.GetStringAsync("http://hogehoge?q=" + x); Console.WriteLine(str); }); await Task.WhenAll(tasks); 別に動きはします

  • 実行コンテキスト

    久々に、そのうち http://ufcpp.net/study/csharp/ に載せる前提の下書き的なブログ。 概要 .NET Frameworkのスレッドは、実行コンテキスト(execution context: 実行の文脈)というものを持っています。 「文脈」という言葉の意味するところは、「意識することなく皆が共有している情報」ということです。実行コンテキストの場合は、以下のような情報を、スレッドを超えて共有します。 セキュリティ コンテキスト: どういう権限でそのスレッドが動いているかを伝搬して、適切なセキュリティを保つ 論理呼び出しコンテキスト: (実際の呼び出しスタック上の上下関係でな く、)論理的な呼び出し関係での情報共有 情報の共有範囲 実行コンテキストを理解するためには、まず、どういう範囲で情報を共有できればいいのかという話をしましょう。 静的フィールド オブジェクトをま

    実行コンテキスト
  • .NET最先端技術によるハイパフォーマンスウェブアプリケーション

    コンテナとimmutableとわたし。あとセキュリティ。(Kubernetes Novice Tokyo #15 発表資料)

    .NET最先端技術によるハイパフォーマンスウェブアプリケーション
    raimon49
    raimon49 2013/06/09
    DBのShardingは使えるクエリが限定されるため最終手段 型情報がミス防止に バッチ処理のようなケースではParallel.ForEach
  • Modern C# Programming 現代的なC#の書き方、ライブラリの選び方

    Event : Visual Studio Users Community Japan #1 Date : 2019/09/14 ソフトウェア/サービス開発において最も後回しにされるものの代表が「パフォーマンスの向上」です。C#/.NET の最大の武器は開発生産性ですが、C# 7.0 以降はパフォーマンス向上のための機能追加が多数行われています。いくつかのポイントを押さえることで実装時からより高速なコードを書くことができるようになります。 このドキュメントでは、そんなポイントとなる箇所をふんだんにお届けします。

    Modern C# Programming 現代的なC#の書き方、ライブラリの選び方
    raimon49
    raimon49 2013/01/29
    モダンC# 確かに今でもdelegate構文を使っている解説文に出会うことある。スレッドはTaskで。
  • 使わなくなった機能・新しい機能

    概要 C# も .NET Framework (のライブラリ)も、ずいぶんと進歩してきました。 その結果、一部の構文やライブラリは、別のもので置き換えられる/置き換えた方がいいものも出てきています。 過去の遺物 いくつかの構文は、もう完全に過去のものです (互換性のためだけに残されています)。 非ジェネリック コレクション ポイント: 非ジェネリック版のコレクションは使ってはいけない。 C# 2.0 で 「ジェネリック」 が導入されると同時に、ジェネリック版のコレクションが導入されました。 それ以前の、非ジェネリック版のコレクションを使うメリットは一切ないので、使わないようにしましょう。 非ジェネリック版からジェネリック版で、名称が変わっているものもあるので気を付けましょう。 「ジェネリック版に、ArrayList 相当のものがない」という誤解もあったりしますが、List<T> がこれに相

    使わなくなった機能・新しい機能
    raimon49
    raimon49 2012/01/30
    レガシーな書き方からモダンな書き方へ
  • neue cc - Modern C# Programming Style Guide

    C# Advent Calendar 2011、ということで、C# 4.0時代のプログラミングスタイルについて説明してみます。モダン、というけれど、某書のように変態的なことじゃなくて、むしろ基的な話のほうです。こういったものはナマモノなので、5.0になればまた変わる、6.0になればまた変わる。変わります。古い話を間に受けすぎないこと(歴史を知るのは大事だけど、そのまま信じるのは別の話)、常に知識をリフレッシュするようにすること。そういうのが大事よね。でも、だからってモダンに書けなきゃダメ!なんてことはありません。ただ、知ること、少しずつ変えていくこと、そういうのは大事よね、って。 ところでしかし、私の主観がかなり入っているので、その辺は差っ引いてください。 varを使う C# 3.0から搭載された型推論での宣言。出た当初には散々議論があって、今もたまに否の意見が出てきたりもしますが、va

    raimon49
    raimon49 2012/01/01
    IntelliSense重要 C#は移り変わりが早くて追い掛けるのが大変…。
  • .NET開発者のための非同期入門 フリーズしないアプリケーションの作り方 - @IT

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

    .NET開発者のための非同期入門 フリーズしないアプリケーションの作り方 - @IT
    raimon49
    raimon49 2011/11/05
    C# 5.0から追加されるasync修飾子, awaitキーワードの紹介。yield returnで処理を返していたテクニカルな書き方が不要になり、誰でも非同期化の恩恵に与れる。
  • neue cc - Rxを使って非同期プログラミングを簡単に

    こないだ公開されたMSDNマガジンの記事、非同期タスク - タスクを使って非同期プログラミングを簡単に。おお、これは分かりやすく非同期周りについて網羅されてる!あと、私はTask全然知らないので初歩から入る導入はお役立ちです。いやまあ、実際のとこTask周りの導入記事っていっぱいあるのに、未だにお役立ち、とか言ってるのもどうかと思わなくもないところではあるんですが不勉強なもので。 同期処理でUIをブロックしてしまう、スレッドプールに投げればいいぢゃない、イベントベースのパターンとAPM(IAsyncResultを使うAsynchronous Programming Model)、そしてTask。おお、全部ですね。全部、全部?そう、何か欠けてます、ええ、Reactive Extensionsが欠けています。というわけで、Taskと対比させながらRxでのコードを見ていきましょう。 非同期実行、

  • monodroid: API design - ものがたり(旧)

    これは http://monodroid.net/Documentation/API_Design の現時点での日語訳。 概要 MonoDroidでは、Monoのコア基クラスライブラリに加えて、さまざまなAndroid APIのバインディングを提供しており、これによってネイティブAndroidアプリケーションをMonoで開発できるようになっています。 MonoDroidのコアには、C#その他の.NETの言語からJavaAPIにアクセス出来るようにするための、C#の世界とJavaの世界を橋渡しする相互運用エンジンが存在しています。 設計原理 MonoDroidのバインディングにはいくつかの設計原理があります。 フレームワーク設計ガイドラインに準拠します 開発者がJavaクラスをサブクラスできるようにします サブクラスではC#の標準の構成概念が機能するはずです 既存のクラスからの派生 基

    monodroid: API design - ものがたり(旧)
  • Big Sky :: JScript.NETでスレッド

    JScript.NETMicrosoftが.NET Framework向けに拡張したJavasSriptで、Common Language Runtime(CLR)上で動作するJavaScript実装です。 CLR上ではC#、VB.NET等が動作しますが、JScript.NETは言語がJavaScriptという事もあって実はC#やVB.NET等と同等に使えない機能がいくらかあります。 JavaScriptは動的言語です。オブジェクトにプロパティを生やしてメソッドにしたり、prototypeを弄ったり、eval()で関数を生成したりも出来ます。つまりコンパイルするとは言えど、型が動的に変えられる言語です。 その為、.NET Frameworkの機能の一つであるDelegateが使えません。.NET FrameworkのThreadはDelegateという関数型拘束によりスレッドを安全に呼び

    Big Sky :: JScript.NETでスレッド
    raimon49
    raimon49 2010/07/15
    C#をメモリ上コンパイルしてJScript側からThread生成してしまう。
  • .NET FrameworkでいわゆるJavaScriptのsetTimeout()みたいな事をやる方法 - terurouメモ

    たまーにやりたくなるんだけど、その都度やり方を忘れちゃってるので備忘録。 private void SetTimeout(Action fn, int time) { BackgroundWorker worker = new BackgroundWorker(); worker.DoWork += delegate(object sender, DoWorkEventArgs e) { Thread.Sleep(time); }; worker.RunWorkerCompleted += delegate(object sender, RunWorkerCompletedEventArgs e) { fn(); }; worker.RunWorkerAsync(); } System.ComponentModel.BackgroundWorkerとSystem.Threading.Thr

    .NET FrameworkでいわゆるJavaScriptのsetTimeout()みたいな事をやる方法 - terurouメモ
    raimon49
    raimon49 2009/10/09
    BackgroundWorker で使い捨ての遅延実行を抽象化する方法。setInterval()はSystem.Threading.Timer
  • 1