У меня есть актер, который имеет изменяемое состояние. В моем методе приема я рисую соответствие сообщениям и вызываю некоторые службы, которые возвращают будущее. Это Будущее изменило бы состояние в моем экземпляре Актера. Является ли это состояние безопасным потоком? Поскольку будущее будет выполняться в другом потоке, является ли состояние моего актера гарантированным потоком?Безопасность Akka с фьючерсами
1
A
ответ
7
Нет, это не будет потокобезопасным, как вы правильно предполагали. Фьючерсы выполняются в любом потоке, который предоставляет контекст выполнения.
Путь к решению этого - передать его обратно тому же актеру. Все входные данные актера всегда должны быть сообщениями. Вы можете найти documentation here.
Некоторые примеры кода:
import akka.pattern.pipe
//... inside the Actor somewhere:
val futureResult: Future[YourType] = something.thatReturnsAFuture()
futureResult.pipeTo(self)
А затем изменить ваш получить блок, так что результат будет обработан после завершения в будущем, и он отправляется обратно в этот актер:
case result: YourType => //...
Смежные вопросы
- 1. Управление внешними фьючерсами с помощью Akka
- 2. Akka Gotchas при работе с фьючерсами
- 3. Specs2 с фьючерсами и примерами
- 4. застрял с фьючерсами в scala
- 5. Операции с асинхронными фьючерсами MVC
- 6. JavaScript DOM с использованием фьючерсами
- 7. Сделка с фьючерсами в цикле
- 8. Вложенные Для постижений с фьючерсами
- 9. assertRaises не работает с фьючерсами
- 10. Испытание Akka для треугольников
- 11. Следите за завершенными фьючерсами
- 12. фильтрация внутри для-понимания с фьючерсами
- 13. Scala вложенный для понимания с фьючерсами
- 14. Работа с фьючерсами в slick и scalatra
- 15. Scala: условное для понимания с фьючерсами
- 16. Как использовать API-интерфейс кэша с фьючерсами
- 17. Обработка исключений с несколькими фьючерсами из ScheduledExecutorService
- 18. Удовлетворение требований к абстрактным признакам с фьючерсами
- 19. Полиморфизм с фьючерсами на C++ 11
- 20. Вычислительные длинная сумму с Clojure фьючерсами
- 21. Использование МАПТО с фьючерсами в Акку/Scala
- 22. Производитель-потребитель с фьючерсами в Scala
- 23. ASP.NET MVC 2 JSONP с фьючерсами MVC
- 24. Проблема с фьючерсами в C++ 0x
- 25. Как связать akka http с потоками akka?
- 26. Модель Threading и AKKA
- 27. Dask совместно с фьючерсами с каналами и использованием памяти
- 28. Понимание взаимодействия между фьючерсами и lazy-seq
- 29. Доступ к стоимости, возвращаемой фьючерсами на scala
- 30. play - как обернуть блокирующий код фьючерсами
Вы можете использовать pipeTo для работы с фьючерсами и изменчивым состоянием внутри актера. –
Как насчет создания context.become? – sparkr
@ user3102968 context.become все еще не решает проблему при изменении внутреннего изменчивого состояния. К этому времени актер может обрабатывать другое сообщение, и у вас будет состояние гонки, когда будущее также изменит внутреннее состояние. Также, если мой ответ является решением, пожалуйста, отметьте его как принято, спасибо. –