Spec-Zone.ru › Scala 3.2

Интерфейс 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 является лексическое ограничение области выполнения кода. То есть каждый метод, класс, файл, пакет или приложение определяет, как выполнять свой собственный код. Это предотвращает проблемы, такие как выполнение обратных вызовов приложения в пуле потоков, принадлежащем библиотеке сетевого взаимодействия. Размер пула потоков библиотеки сетевого взаимодействия можно безопасно настроить, зная, что будут затронуты только сетевые операции этой библиотеки. Выполнение обратных вызовов приложения можно настроить отдельно.

Наследуемые типы
класс Object
интерфейс Matchable
класс Any
Известные подтипы
интерфейс ExecutionContextExecutor
объект parasitic.type
интерфейс ExecutionContextExecutorService

Абстрактные методы

Исходный код
def execute(runnable: Runnable): Unit

Выполняет блок кода в этом контексте выполнения.

Параметры
runnable

задача для выполнения

Исходный код
def reportFailure(cause: Throwable): Unit

Сообщает об ошибке асинхронного вычисления.

Параметры
cause

причина ошибки

© 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API