2011-02-09 55 views
3

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

需要的东西一点点更多地参与。最好是.NET版本< = 3.5。

+0

我假设你看到了该页面的链接? http://blog.gurock.com/wp-content/uploads/2008/01/activeobjects.pdf – mjcopple 2011-02-09 14:07:24

+0

学士论文非常有趣,但它不包含实现。 – 2011-02-09 14:12:41

回答

0

添加到安东Tykhyy的答案,对于.NET 3.5可作为的Reactive Extensions的一部分的System.Threading.Tasks.Task的版本。请注意,此版本没有Microsoft的官方支持。

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 = ...;如果你需要它。