2011-02-09 15 views
3

アクティブオブジェクトパターンの実装を探していますが、それほど多くはありません。これは私が思い付いたものです:アクティブオブジェクトパターンの.NET実装

少しより複雑なものが必要です。好ましくは.NETバージョン< = 3.5。

+0

このリンクをこのページで見たことがありますか? http://blog.gurock.com/wp-content/uploads/2008/01/activeobjects.pdf – mjcopple

+0

学士論文は非常に興味深いですが、実装は含まれていません。 –

答えて

2

System.Threading.Tasks.Taskを参照してください。

+1

これはいいですね。あまりにも私のプロジェクトが.NET 3.5を使用して悪い:( –

0

Reactive Extensionsの一部として利用できる.NET 3.5のための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 = ...;を使用し、スレッドセーフではありません。