.NET реализация шаблона активного объекта - PullRequest
3 голосов
/ 09 февраля 2011

Я ищу реализации шаблона активного объекта, но пока не очень.Вот что я придумал:

Нужно что-то более сложное.Предпочтительно для версии .NET <= 3.5. </p>

Ответы [ 4 ]

2 голосов
/ 21 июня 2011

Простая реализация, использующая 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 голосов
/ 09 февраля 2011
0 голосов
/ 27 апреля 2011

Помимо ответа Антона Тихого, существует версия System.Threading.Tasks.Task для .NET 3.5, доступная в составе Reactive Extensions .Обратите внимание, что эта версия не имеет официальной поддержки от Microsoft.

0 голосов
/ 11 февраля 2011

Я не смотрел на код, но, похоже, это реализация шаблона активного объекта.

http://www.codeproject.com/KB/architecture/LongRunningActiveObject.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...