我通常对部分实现接口持谨慎态度。然而,IAsyncResult
这是一种特殊情况,因为它支持几种完全不同的使用模式。您多久使用/看到使用AsyncState
/AsyncCallback
模式,而不是仅仅调用EndInvoke
、使用AsyncWaitHandle
或轮询IsCompleted
(讨厌)?
相关问题:Detecting that a ThreadPool WorkItem has completed/waiting for completion。
考虑这个类(非常近似,需要锁定):
public class Concurrent<T> {
private ManualResetEvent _resetEvent;
private T _result;
public Concurrent(Func<T> f) {
ThreadPool.QueueUserWorkItem(_ => {
_result = f();
IsCompleted = true;
if (_resetEvent != null)
_resetEvent.Set();
});
}
public WaitHandle WaitHandle {
get {
if (_resetEvent == null)
_resetEvent = new ManualResetEvent(IsCompleted);
return _resetEvent;
}
public bool IsCompleted {get; private set;}
...
它有WaitHandle
(懒惰地创建,正如IAsyncResult
文档中描述的那样)和IsCompleted
,但我没有看到AsyncState
({return null;}
?)的合理实现。那么实施它有意义IAsyncResult
吗?请注意,Task
在 Parallel Extensions 库中确实实现了IAsyncResult
,但只是IsCompleted
隐式实现。