unawaited_futures 진단: Future는 반드시 await 하거나 unawaited로 표시해요
unawaited_futures 진단: Future는 반드시 await 하거나 unawaited로 표시해요
unawaited_futures는 async 함수 본문 안에서 Future를 반환하는 함수를 await하지 않거나 unawaited로 표시하지 않은 것을 Dart 분석기가 알려주는 린트(lint) 규칙이에요. 흔히 깜빡하고 await를 빼먹는 실수를 잡아줘요.
본문
설명
async 함수 본문 안에서 Future나 FutureOr을 반환하는 함수는 await 해야 해요 (DO). 이름 짓는 관례만으로는 메서드가 동기(sync)인지 비동기(async)인지 알 수 없으니(물론 dart:io의 일부 제외), async 메서드 안에서 await를 빼먹기 쉬워요.
정말로 fire-and-forget(던져두고 기다리지 않는) Future를 시작하고 싶다면, 권장하는 방법은 dart:async의 unawaited를 사용하는 거예요. // ignore나 // ignore_for_file 주석도 동작해요.
좋지 않은 코드 (BAD)
Future doSomething() => ...;
void main() async {
doSomething(); // Likely a bug.
}
좋은 코드 (GOOD)
Future doSomething() => ...;
void main() async {
await doSomething();
unawaited(doSomething()); // Explicitly-ignored fire-and-forget.
// ignore: unawaited_futures
doSomething(); // Explicitly-ignored fire-and-forget.
}
규칙 활성화하기
analysis_options.yaml 파일의 linter > rules 아래에 unawaited_futures를 추가해서 활성화할 수 있어요.
linter:
rules:
- unawaited_futures
YAML 맵 문법으로 설정하고 있다면 linter > rules 아래에 unawaited_futures: true를 추가해요.
linter:
rules:
unawaited_futures: true