В erlang вы можете передать исходное состояние актеру при его нерестах. Таким образом, вам не нужно иметь дело с сообщениями init, которые снова возвращают актер в его исходное состояние или сообщения, для которых требуется сообщение init. В orleans, когда предположение о зернах всегда существует, вы не можете использовать конструкторы. Есть ли способ передать начальное состояние зернам, избегая, таким образом, любого метода init, который нарушает согласованность, требуя его вызова до любого другого метода?Как я могу обеспечить согласованность зерен orleans?
Когда я говорю «возьмите актер в его исходное состояние», я имею в виду, в контексте orleans, метод вызова init для активации определенной зернистости дважды. Это похоже на состояние перезаписи. Может быть, вам нужен этот король сообщения, который перезагружает состояние, но если вам это не нужно, это ловушка, потенциальный источник ошибок.
Я ищу некоторый тип конструктора, что-то вроде spawn(module, function, [initial state])
от erlang. Моей первой попыткой был поиск любой перегрузки GetGrain со следующей подписью: GrainFactory.GetGrain<IGrain>(id, initialState);
Возможно, я что-то не понял, но вы написали: «Начальное состояние снова» и «Зерна всегда существуют». Вы должны использовать новый идентификатор зерна для нового «первого» сообщения, и новое зерно будет создано с нулевым состоянием. «Всегда существует» не означает, что существует только одно зерно данного типа, это означает, что зерно с данным идентификатором никогда не создавалось и не удалялось вручную, но структура создает их, когда данный идентификатор используется впервые. – lmagyar
Is 'OnActivateAsync()' что вы ищете? Кажется, он вызывается всякий раз, когда активируется экземпляр зерна, поэтому вы можете инициализировать его поля. Но я не мог найти для этого никакой надлежащей документации. – svick
Нет, это не то, что я ищу. OneActivateAsync() не ожидает каких-либо параметров, это просто обратный вызов события, чтобы что-то сделать, когда зерно активировано. Я ищу некоторый тип конструктора, что-то вроде 'spawn (модуль, функция, [начальное состояние])' от erlang. Моя первая попытка - найти любую перегрузку GetGrain со следующей подписью: «GrainFactory.GetGrain (id, initialState);' –