TaskまたはTask<TResult>オブジェクトは待機可能であるため、戻り値がTaskまたはTask<TResult>であるオブジェクトに対してawaitキーを使用できます。TaskまたはTask<TResult>は、最も頻繁に使用される待機可能なオブジェクトです。
独自の待機可能なオブジェクトを定義することもできます。オブジェクトには、以下の資格が必要です。
- GetAwaiter()メソッド(インスタンスメソッドまたは拡張メソッド)があります。
- そのGetAwaiter()メソッドはawaiterを返します。次の場合、オブジェクトは待機者です。
- INotifyCompletionまたはICriticalNotifyCompletionインターフェイスを実装します。
- ゲッターがあり、ブール値を返すIsCompletedがあります。
- voidまたは結果を返すGetResult()メソッドがあります。
私の質問は、なぜマイクロソフトがこれらの待機可能なオブジェクトを制約するためのインターフェイスを提供しなかったのかということです。待機可能なオブジェクトを実装するための現在のメソッドは少し複雑です。