Ключевое слово async
Ключевое слово async ставится после списка параметров
функции или метода и превращает ее в асинхронную.
Такая функция всегда возвращает объект Future,
даже если внутри нее написано return с обычным значением.
Внутри асинхронной функции становится доступным
ключевое слово await, которое приостанавливает
выполнение до завершения переданного Future,
не блокируя при этом основной поток программы.
Если функция помечена как async, но не содержит
return, она вернет Future<void>.
Если содержит return со значением, это значение
автоматически оборачивается в Future.
Синтаксис
Future<Type> functionName() async
{
// тело функции
}
Пример
Давайте создадим простую асинхронную функцию, которая возвращает строку:
Future<String> getString() async
{
return 'abcde';
}
void main() async
{
String res = await getString();
print(res);
}
Результат выполнения кода:
"abcde"
Пример
Давайте используем await внутри асинхронной
функции для ожидания результата другой
асинхронной функции:
Future<int> getNumber() async
{
return 42;
}
Future<void> printNumber() async
{
int res = await getNumber();
print(res);
}
void main() async
{
await printNumber();
}
Результат выполнения кода:
42
Пример
Давайте обработаем ошибку внутри асинхронной
функции с помощью try и catch:
Future<String> getData() async
{
throw Exception('Something went wrong');
}
void main() async
{
try
{
String res = await getData();
print(res);
}
catch (e)
{
print('Error: $e');
}
}
Результат выполнения кода:
"Error: Exception: Something went wrong"
Смотрите также
-
ключевое слово
await,
которое ожидает завершения Future -
функция
scheduleMicrotask,
которая планирует выполнение микрозадачи -
функция
unawaited,
которая явно игнорирует Future -
раздел
async,
посвященный асинхронному программированию