我正在寻找活动对象模式的实现,但到目前为止还没有。这就是我想出的:
需要更多参与的东西。优选地,对于.NET版本< = 3.5。
答案 0 :(得分:2)
答案 1 :(得分:2)
使用System.Threading.Tasks.Task
的简单实现class ActiveObject : IDisposable
{
private Task _lastTask = Task.Factory.StartNew(() => { });
public void Dispose()
{
if (_lastTask == null)
return;
_lastTask.Wait();
_lastTask = null;
}
public void InvokeAsync(Action action)
{
if (_lastTask == null)
throw new ObjectDisposedException(GetType().FullName);
_lastTask = _lastTask.ContinueWith(t => action());
}
}
InvokeAsync
不是线程安全的,如果需要,请使用lock (_lastTask) lastTask = ...;
。
答案 2 :(得分:0)
我没有查看代码,但这似乎是活动对象模式的实现。
http://www.codeproject.com/KB/architecture/LongRunningActiveObject.aspx
答案 3 :(得分:0)
除了Anton Tykhyy的回答之外,还有一个版本的System.Threading.Tasks.Task for .NET 3.5作为Reactive Extensions的一部分提供。请注意,此版本没有Microsoft的官方支持。