根據大牛的方案修改的自己使用的Actor!
最近進行併發數據處理,學習到了 Actor模型,其中最簡單的實現方式是一位大牛利用Dataflow實現的。
大牛的方案:http://www.jayway.com/2013/11/15/an-actor-model-implementation-in-c-using-tpl-dataflow/。
根據此方案,做了一點修改,做了一個抽象的類,代碼如下:
1 public abstract class NewActor<T> 2 { 3 private readonly ActionBlock<T> _action; 4 5 protected NewActor() 6 { 7 _action = new ActionBlock<T>(T => Receive(T)); 8 } 9 10 // 接收並處理消息 11 protected abstract void Receive(T message); 12 13 public void Post(T message) 14 { 15 _action.Post(message); 16 } 17 18 public void Shutdown() 19 { 20 _action.Complete(); 21 _action.Completion.Wait(); 22 } 23 }