C#
 Computer >> コンピューター >  >> プログラミング >> C#

C# 8.0の非同期ストリーム(Async Streams)とは?基本と使い方を解説


C# 8.0で導入された「非同期ストリーム(Async Streams)」は、ストリーミング形式のデータソースをモデル化するための機能です。データストリームでは、要素の取得や生成が非同期に行われるケースが多くあります。

従来のC#では、yield returnを使用する反復子メソッドにasync修飾子を付けることはできませんでした。しかし、C# 8.0以降では、async修飾子を付けたメソッド内でもyield returnを使って要素を順次返せるようになりました。

そして、生成した非同期ストリームを消費する側では、await foreachループを使用します。

たとえば、以下のような従来のコードは…

static IEnumerable<string> Message(){   yield return "Hello!";   yield return "Hello!";}

IAsyncEnumerable<T>インターフェースを利用することで、次のように書き換えられます。

static async IAsyncEnumerable<string> MessageAsync(){   await Task.Delay(2000);   yield return "Hello!";   await Task.Delay(2000);   yield return "Hello!";}

サンプルコード

class Program{   public static async Task Main(){      await foreach (var item in MessageAsync()){         System.Console.WriteLine(item);      }      Console.ReadLine();   }   static async IAsyncEnumerable<string> MessageAsync(){      await Task.Delay(2000);      yield return "Hello!";      await Task.Delay(2000);      yield return "Hello!";   }}

実行結果

Hello!
Hello!

このように非同期ストリームを活用すれば、各要素が利用可能になったタイミングで順次処理を行えるため、スレッドをブロックすることなく効率的な非同期処理を実現できます。ネットワーク通信やファイル読み込みなど、I/O待ちが発生しやすい処理や、リアルタイム性が求められるデータ処理において特に有効な機能です。


  1. C#の名前空間(namespace)とは?定義方法と基本的な使い方を解説

    名前空間とは名前空間(namespace)とは、ある一連の名前を別の一連の名前から分離して管理するための仕組みです。大規模なプロジェクトでは、複数の開発者が同じ名前のクラスやメソッドを作成することがあり、名前の衝突(コンフリクト)が発生する可能性があります。名前空間を使うことで、こうした衝突を防ぎ、コードを論理的に整理できます。また、.NET Framework が提供する System なども名前空間の一つであり、標準ライブラリの機能はすべて名前空間によって分類・管理されています。名前空間の定義方法名前空間の定義は、namespace キーワードで始まり、その後に名前空間名を続けて記述します

  2. Pythonで使える引用符の種類と使い方をわかりやすく解説

    Pythonにおける引用符の基本Pythonでは、文字列(string)オブジェクトを作成する際に引用符を使用します。Pythonが認識できる引用符は、シングルクォート()、ダブルクォート()、そしてトリプルクォート( または )の3種類です。文字列リテラルは、一連の文字をシングルクォート(hello)、ダブルクォート(hello)、またはトリプルクォート(hello や hello)で囲むことで記述できます。どの引用符を使っても、生成される文字列オブジェクトはまったく同じものになります。>>> var1=hello >>> var1 hello >&