Назад к вопросам
Junior
148
questionbank

Как работает ключевое слово await в асинхронном программировании на Flutter?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

Ключевое слово await используется в асинхронных функциях (помеченных ключевым словом async), чтобы приостановить выполнение функции до тех пор, пока Future не завершится и не вернет результат.

Принцип работы:

  1. Когда выполнение доходит до строки с await, текущая функция приостанавливается.
  2. Управление возвращается вызывающему коду (или event loop), позволяя другим частям программы выполняться. Это предотвращает блокировку UI.
  3. Когда Future, на который ссылается await, завершается (то есть, выполняет свою асинхронную операцию и возвращает значение или выбрасывает исключение), выполнение приостановленной функции возобновляется с того места, где оно было прервано.
  4. Если Future завершился успешно, значение, возвращаемое Future, становится результатом выражения await.
  5. Если Future завершился с ошибкой (выбросил исключение), это исключение будет выброшено в месте вызова await.

Пример:

// Асинхронная функция, помеченная async
Future<String> fetchData() async {
  // Имитация асинхронной операции (например, сетевого запроса)
  await Future.delayed(Duration(seconds: 2));
  return 'Данные из сети получены!';
}

void main() async {
  print('Начало получения данных...');

  // Использование await для ожидания завершения Future
  try {
    String data = await fetchData();
    print('Получено: $data');
  } catch (e) {
    print('Ошибка при получении данных: $e');
  }

  print('Программа завершена (хотя await еще может выполняться)');
}

В этом примере main помечена как async для использования await. Вызов await fetchData() приостанавливает выполнение main на 2 секунды, не блокируя основной поток UI. Пока fetchData ожидает, другие части приложения могут работать. Как только fetchData завершится, выполнение main возобновится, и переменной data будет присвоено возвращенное значение.