Akka et son port Akka.NET prennent en charge les comportements commutables (http://getakka.net/docs/working-with-actors/Switchable%20Behaviors), et pas seulement dans une forme simple de laisser un acteur à devenir un acteur avec un comportement différent mais aussi sous une forme de pile comportementale: un acteur peut revenir à son comportement précédent. Ceci est réalisé avec les méthodes BecomeStacked et BecomeUnstacked. En F # comportement est pris en charge d'une manière différente: il n'est pas nécessaire Devenir une méthode, à la place une fonction d'acteur peut définir plusieurs gestionnaires de traitement de boîte aux lettres et appeler un autre gestionnaire basculant efficacement un acteur à un comportement différent. Cela fonctionne bien pour les comportements non empilés, mais que se passe-t-il si une fonction d'acteur a besoin d'empiler ses comportements? Comment cela peut-il être implémenté en F #?Akka.NET F # API et les acteurs avec un comportement empilé
MISE À JOUR. Illustrer avec un cas d'utilisation. Considérez la téléphonie où un acteur peut avoir des comportements DirectCall, ConferenceCall et OnHold. Le comportement OnHold est accessible à partir de DirectCall et de ConferenceCall, et lorsqu'un acteur peut recevoir des messages pour démarrer des appels imbriqués. Lorsqu'un appel imbriqué est terminé, un acteur revient à un appel précédent qui peut être DirectCall ou ConferenceCall. Je ne vois pas comment cela peut être implémenté sans envoyer explicitement la pile complète à un acteur. Après tout, ce n'est pas si mal, je me demandais juste s'il y avait une autre façon offerte par Akka.NET. La boîte aux lettres Context.BecomeXXX est toujours disponible dans l'API F #, mais elle n'a pas d'utilité dans l'expression de calcul "acteur".
MISE À JOUR 2 Je suis d'accord avec Tomas Jansson qui raisonnait dans les commentaires qu'il avait plutôt envoyer la pile de comportements antérieurs (ou états précédents soyons justes) explicitement au lieu de compter sur la méthode intégrée, il BecomeStacked Akka que cache l'histoire et rend plus difficile à tester. Donc, l'absence de méthodes BecomeXXX dans F # API ne le rend pas vraiment moins puissant.
Alors, vous voulez dire que ma réponse est la bonne? ;) –
D'accord, d'accord. Au moins le meilleur :-) –