vto*_*ola 5 c# oop interface task iasyncresult
也许这是一个愚蠢的问题.
在Task类被声明是这样的:
public class Task : IThreadPoolWorkItem, IAsyncResult, IDisposable
Run Code Online (Sandbox Code Playgroud)
该IAsyncResult接口声明如下:
public interface IAsyncResult
{
object AsyncState { get; }
WaitHandle AsyncWaitHandle { get; }
bool CompletedSynchronously { get; }
bool IsCompleted { get; }
}
Run Code Online (Sandbox Code Playgroud)
但该成员AsyncWaitHandle在Task类或实例中不存在.
这段代码:
System.Threading.Tasks.Task t = new System.Threading.Tasks.Task(() => { });
t.AsyncWaitHandle.ToString();
Run Code Online (Sandbox Code Playgroud)
引发此编译错误:
错误1'System.Threading.Tasks.Task'不包含'AsyncWaitHandle'的定义,并且没有扩展方法'AsyncWaitHandle'接受类型'System.Threading.Tasks.Task'的第一个参数可以找到(你错过了吗?使用指令或程序集引用?)
但是,这不仅编译:
System.IAsyncResult t = new System.Threading.Tasks.Task(() => { });
t.AsyncWaitHandle.ToString();
Run Code Online (Sandbox Code Playgroud)
但也有效,因为成员存在.这巫术是什么?
这是一个编译器技巧还是以另一种方式隐藏?
干杯.
TaskIAsyncResult显式实现,所以你必须先强制转换:
System.Threading.Tasks.Task t = new System.Threading.Tasks.Task(() => { });
((IAsyncResult)t).AsyncWaitHandle.ToString()
Run Code Online (Sandbox Code Playgroud)
显式实现定义如下:
public class Task : IAsyncResult
{
WaitHandle IAsyncResult.AsyncWaitHandle
{
get { ... }
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
914 次 |
| 最近记录: |