我通常不建议局部实现接口。然而,
相关问题:检测 ThreadPool WorkItem 是否已完成/等待完成。
考虑以下类(需要加锁):
它有一个
IAsyncResult
是一个特殊情况,因为它支持多种不同的用法模式。您使用/看到使用 AsyncState
/AsyncCallback
模式的频率有多高?相比之下,仅调用 EndInvoke
,使用 AsyncWaitHandle
或轮询 IsCompleted
(yuck),您会使用哪种模式?相关问题:检测 ThreadPool WorkItem 是否已完成/等待完成。
考虑以下类(需要加锁):
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
是否有意义?请注意,Parallel Extensions库中的Task
确实实现了IAsyncResult
,但只有IsCompleted
是隐式实现的。