たぶんそれはばかげた質問です。
Task
クラスは次のように宣言されます。
public class Task : IThreadPoolWorkItem, IAsyncResult, IDisposable
IAsyncResult
インターフェイスは次のように宣言されます。
public interface IAsyncResult
{
object AsyncState { get; }
WaitHandle AsyncWaitHandle { get; }
bool CompletedSynchronously { get; }
bool IsCompleted { get; }
}
しかし、メンバーはクラスまたはインスタンス AsyncWaitHandle
に存在しません。Task
このコード:
System.Threading.Tasks.Task t = new System.Threading.Tasks.Task(() => { });
t.AsyncWaitHandle.ToString();
次のコンパイル エラーが発生します。
エラー 1 'System.Threading.Tasks.Task' には 'AsyncWaitHandle' の定義が含まれておらず、タイプ 'System.Threading.Tasks.Task' の最初の引数を受け入れる拡張メソッド 'AsyncWaitHandle' が見つかりませんでした (ディレクティブまたはアセンブリ参照を使用していますか?)
ただし、これはコンパイルされるだけではありません。
System.IAsyncResult t = new System.Threading.Tasks.Task(() => { });
t.AsyncWaitHandle.ToString();
しかし、メンバーが存在するため、機能します。この魔法は何ですか?
それはコンパイラのトリックですか、それとも別の方法で隠されていますか?
乾杯。