一般社団法人 全国個人事業主支援協会

COLUMN コラム

TCSについて調べてみました。

TCSとはTaskCompletionSourceの略で、インスタンスを作成しそのインスタンスを渡すことで

非同期に結果を受け取ることができるオブジェクトのことです。

 

外部のイベントやコールバックでTaskを完了させたいときにとても便利なクラスです。

 

役割 説明
Task 非同期処理の結果を表す
TaskCompletionSource Taskを完了させるためのスイッチを持つ

 

◆基本サンプル

■ TaskCompletionSource を使って Task を返すメソッド

public Task<string> WaitEventAsync()
{
var tcs = new TaskCompletionSource<string>(
TaskCreationOptions.RunContinuationsAsynchronously
);

// 3秒後に完了させる非同期処理の例
Task.Run(async () =>
{
await Task.Delay(3000);
tcs.SetResult(“完了しました!”);
});

return tcs.Task;
}

呼び出し側

var result = await WaitEventAsync();
Console.WriteLine(result); // → 3秒後 “完了しました!”

 

◆TaskCreationOptions.RunContinuationsAsynchronouslyの意味

SetResultのあとの処理(continuation)がSetResultを呼び出したスレッドでそのまま実行される恐れがある。

そのため、continuationをスレッドプールに予約して後で実行させる必要がある。

 

これで、便利にスレッド間で同期処理ができる!

The following two tabs change content below.

青木 友慈

最新記事 by 青木 友慈 (全て見る)

この記事をシェアする

  • Twitterでシェア
  • Facebookでシェア
  • LINEでシェア