.NET实现的活动对象模式

时间:2011-02-09 13:55:20

标签: c# .net multithreading design-patterns asynchronous

我正在寻找活动对象模式的实现,但到目前为止还没有。这就是我想出的:

需要更多参与的东西。优选地,对于.NET版本< = 3.5。

4 个答案:

答案 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的官方支持。