Spec-Zone.ru › Scala 3.1

Трейт scala.concurrent.ExecutionContext

Объект-компаньон • Исходный код

@implicitNotFound("Не удалось найти неявное ExecutionContext. Вы можете добавить\nпараметр (implicit ec: ExecutionContext) в свой метод.\n\nExecutionContext используется для настройки того, как и в каких\nпулах потоков будут выполняться асинхронные задачи (например, Futures),\nпоэтому выбранный ExecutionContext важен.\n\nЕсли ваше приложение не определяет ExecutionContext в другом месте,\nрассмотрите использование глобального ExecutionContext Scala, определив\nследующее:\n\nimplicit val ec: scala.concurrent.ExecutionContext = scala.concurrent.ExecutionContext.global")
trait 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(@deprecatedName("t") 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.1.1/scala/concurrent/ExecutionContext.html

Spec-Zone.ru

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