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