2016-08-05 3 views
0

Я создал два актера Actor1 и Actor2 в одном проекте и зарегистрировали их в Program.cs:Доля государства между различными типами актерского

ActorRuntime.RegisterActorAsync<Actor1>(); 
ActorRuntime.RegisterActorAsync<Actor2>(); 

, но во время исполнения я вижу, что каждый из них размещены в отдельных Actor услуги. Когда я сохраняю некоторые данные в Reliable Collections через StateManager в Actor1, это состояние недоступно для Actor2.

Можно ли разделить состояние между различными типами участников?

ответ

2

Прежде всего, похоже, что вы используете актеров не так. Вы должны зарегистрировать один тип актера для хост-процесса. Например

ActorRuntime.RegisterActorAsync<Actor1>((context, actorType) => 
        new ActorService(
         context, 
         actorType, 
         () => new Actor1())) 
.GetAwaiter() 
.GetResult(); 

Если вы хотите общения между участниками, необходимо создать экземпляр актера и вызвать метод его интерфейс для сохранения данных. Затем, если вы хотите сохранить одни и те же данные в другом актере, вам нужно создать другой экземпляр. Actros по дизайну уникальные, отдельные объекты. Вы можете сделать это с одного места и создать двух актеров и сохранить данные отдельно, или вы можете создать второго актера с первого. Например,

var actor1Proxy = ActorProxy.Create<IActor1>(actorId, new Uri("fabric:/MyApp/Actor1")); 
var actor2Proxy = ActorProxy.Create<IActor2>(actorId, new Uri("fabric:/MyApp/Actor2")); 

actor1Proxy.SaveData(data); 
actor2Proxy.SaveData(data); 

Возможно, вам нужна надежная служба для хранения ваших данных. Пожалуйста, прочитайте this и this статей за дополнительной информацией об использовании актеров.

+0

Да, в общем, вы должны принимать актеров в разных процессах, так как вы можете обновлять их независимо друг от друга. Однако в одном и том же процессе вы можете размещать несколько типов акторов. –

+0

@ VipulM-MSFT да, у нас даже есть [ответ] (http://stackoverflow.com/a/38732867/2152061) об этом. – cassandrad

Смежные вопросы