【发布时间】:2014-03-04 14:09:04
【问题描述】:
也许这是一个愚蠢的问题。
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' 并且没有扩展方法 'AsyncWaitHandle' 接受“System.Threading.Tasks.Task”类型的第一个参数可以 被发现(您是否缺少 using 指令或程序集引用?)
但是,这不仅编译:
System.IAsyncResult t = new System.Threading.Tasks.Task(() => { });
t.AsyncWaitHandle.ToString();
但也有效,因为该成员存在。这是什么法术?
这是一个编译器技巧还是以其他方式隐藏?
干杯。
【问题讨论】:
标签: c# oop interface task iasyncresult