【C#】 async と非同期プログラミング
非同期処理とは
非同期処理(Asynchronous Programming)とは、プログラムの実行をブロックせずに複数の処理を同時に進行させる技術です。
例えば、Web アプリケーションでデータを取得する際に、非同期処理を利用することで、取得完了を待たずに別の処理を実行できます。
async と await の基本
C# では async
と await
を使って非同期メソッドを記述します。
async Task SampleMethodAsync()
{
await Task.Delay(2000); // 2秒待機
Console.WriteLine("処理が完了しました");
}
基本的な非同期メソッドの例
次の例は、HTTP リクエストを非同期で処理するシンプルなプログラムです。
using System;
using System.Net.Http;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
string url = "https://example.com";
string result = await FetchDataAsync(url);
Console.WriteLine(result);
}
static async Task<string> FetchDataAsync(string url)
{
using HttpClient client = new HttpClient();
return await client.GetStringAsync(url);
}
}
実用的な非同期処理の例
データベースアクセスやファイル入出力にも非同期処理は有効です。
using System;
using System.IO;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
string content = await ReadFileAsync("sample.txt");
Console.WriteLine(content);
}
static async Task<string> ReadFileAsync(string filePath)
{
using StreamReader reader = new StreamReader(filePath);
return await reader.ReadToEndAsync();
}
}
よくある間違いと注意点
非同期処理では、以下の点に注意する必要があります。
- 戻り値を
void
にせず、基本的にTask
またはTask<T>
を使う。 - デッドロックを避けるため、同期的な
.Result
や.Wait()
の使用を避ける。 - 例外処理を適切に行う(例外がスローされた場合、非同期タスクがクラッシュする可能性がある)。
非同期プログラミングを適切に活用することで、C# アプリケーションのパフォーマンスとレスポンスが向上します。