TaskCompletionSource
完了していないTaskを手動で作成し、後からTrySetResult/TrySetException/TrySetCanceledで結果・例外・キャンセルを確定させる.NETのクラス。イベントベースのAPIをTaskベースの非同期パターンへ橋渡しする際に使う。
- 概念URI
https://comcomponent.com/knowledge/taskcompletionsource/
- 別名・表記
- TaskCompletionSource<TResult>
- 最終確認日
- 2026-08-01
- 機械可読データ
- JSON-LD
この概念が関わる関係
- Control.Invoke / Control.BeginInvokeはTaskCompletionSourceを前提とします。Control.BeginInvokeが返すIAsyncResultはそのままawaitできないため、Control.InvokeAsyncが無い環境(.NET Framework 4.8、.NET 6/8など)でasyncフローに乗せるにはTaskCompletionSourceで包む必要がある。 / 確度: 条件付きの関係 / 確認日: 2026-08-01 出典
- TaskCompletionSourceはCancellationToken(.NET)を前提とします。本記事のInvokeOnUiAsyncのように、コントロールが破棄されてBeginInvoke経由のデリゲートが実行されずに捨てられる事態に備えてキャンセルで畳みたい設計に限る。記事のInvokeOnUiAsync拡張メソッドはCancellationTokenを必須引数にしているが、TaskCompletionSource自体はCancellationTokenなしでも動作する汎用の型である。 / 確度: 条件付きの関係 / 確認日: 2026-08-01 出典
- TaskCompletionSourceは再入防止ガード(Interlocked.Exchange等)を利用します。本記事のInvokeOnUiAsyncのように、キャンセル側とBeginInvokeで実行されるデリゲート側のどちらか一方だけが結果を確定できるようにしたい場合、TaskCompletionSourceはInterlocked.Exchangeで用意した「1回ぶんの権利」と組み合わせて使われる。 / 確度: 条件付きの関係 / 確認日: 2026-08-01 出典
この概念を扱う記事
一次資料
このページはサイトの知識グラフ(_data/knowledge/)から自動生成されています。誤りの指摘はお問い合わせからお願いします。