Интерфейс ExecutionContext.ExecutionContext
интерфейс ExecutionContext
Объект, способный асинхронно выполнять логику программы, обычно, но не обязательно, используя пул потоков.
Общий интерфейс ExecutionContext должен быть асинхронным при выполнении любого Runnable, переданного в его метод execute. Специализированный ExecutionContext может быть синхронным, но должен передаваться только коду, явно безопасном для выполнения с использованием синхронного ExecutionContext.
API, такие как Future.onComplete, требуют предоставления обратного вызова и неявного ExecutionContext. Неявный ExecutionContext будет использован для выполнения обратного вызова.
Хотя можно просто импортировать scala.concurrent.ExecutionContext.Implicits.global для получения неявного ExecutionContext, разработчики приложений должны тщательно продумать, где они хотят определить политику выполнения; в идеале, одно место в приложении — или в логически связанном разделе кода — примет решение о том, какой ExecutionContext использовать. То есть, следует избегать жесткой кодировки, особенно через импорт, scala.concurrent.ExecutionContext.Implicits.global. Рекомендуемый подход заключается в добавлении (implicit ec: ExecutionContext) к методам или параметрам конструктора класса, которым необходим ExecutionContext.
Затем локально импортируйте конкретный ExecutionContext в одном месте для всего приложения или модуля, неявно передавая его в отдельные методы. Или определите локальный неявный val с требуемым ExecutionContext.
Настройка пользовательского ExecutionContext может быть уместна для выполнения кода, который блокирует выполнение на ввода-выводе или выполняет длительные вычисления. ExecutionContext.fromExecutorService и ExecutionContext.fromExecutor являются хорошими способами создания пользовательского ExecutionContext.
Целью ExecutionContext является лексическое ограничение области выполнения кода. То есть каждый метод, класс, файл, пакет или приложение определяет, как выполнять свой собственный код. Это предотвращает проблемы, такие как выполнение обратных вызовов приложения в пуле потоков, принадлежащем библиотеке сетевого взаимодействия. Размер пула потоков библиотеки сетевого взаимодействия можно безопасно настроить, зная, что будут затронуты только сетевые операции этой библиотеки. Выполнение обратных вызовов приложения можно настроить отдельно.
| Наследуемые типы | |
|---|---|
| Известные подтипы |
Абстрактные методы
Исходный код
Выполняет блок кода в этом контексте выполнения.
| Параметры |
|
|---|
Исходный код
Сообщает об ошибке асинхронного вычисления.
| Параметры |
|
|---|
© 2002-2022 EPFL, with contributions from Lightbend.
Licensed under the Apache License, Version 2.0.
https://scala-lang.org/api/3.2.0/scala/concurrent/ExecutionContext.html