也许这是一个愚蠢的问题。
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();
但也有效,因为该成员存在。这是什么法术?
这是编译器技巧还是以其他方式隐藏?
干杯。