Почему функция actorOf **НЕ** требует входных данных функции с *Actor‹_›* в качестве параметра?

Akka.Net:

Почему функция actorOf НЕ требует ввода функции с параметром Actor‹_>?

Похоже, что для функции actorOf2 ДЕЙСТВИТЕЛЬНО требуется параметр Actor‹_>.

Контекст вызова этих функций следующий:

let consoleWriterActor = spawn myActorSystem "consoleWriterActor" (actorOf Actors.consoleWriterActor)
let consoleReaderActor = spawn myActorSystem "consoleReaderActor" (actorOf2 (Actors.consoleReaderActor consoleWriterActor))

let consoleReaderActor (consoleWriter: IActorRef) (mailbox: Actor<_>) message = 
    ...

let consoleWriterActor message = 
    ...

Подпись actorOf следующая:

('Message -> unit) -> Actor<Message> -> Cont<'Message,'Returned>

Подпись actorOf2 следующая:

(Actor<Message> -> 'Message -> unit) -> Actor<Message> -> Cont<'Message,'Returned>

Вывод:

Я новичок в Akka.net. Таким образом, я не понимаю, почему параметр "Actor‹_>" (который, как мне кажется, представляет собой почтовый ящик) не может быть полезен для функцииactorOf.


person Scott Nimrod    schedule 08.02.2017    source источник


Ответы (1)


Функция actorOf2 принимает параметр Actor<_>, который представляет контекст выполнения актора (из F# MailboxProcessor часто называется почтовым ящиком). Это позволяет такие вещи, как изменение жизненного цикла актера, создание дочерних акторов или общение с отправителем сообщения.

Однако иногда вы можете захотеть создать актора, который предназначен для работы в качестве простого приемника ваших данных, т.е. для обработки сообщений и отправки результата в какую-либо внешнюю службу. Вот где actorOf может быть полезен.

person Bartosz Sypytkowski    schedule 10.02.2017