unawaited_futures 진단: Future는 반드시 await 하거나 unawaited로 표시해요

unawaited_futures 진단: Future는 반드시 await 하거나 unawaited로 표시해요

unawaited_futuresasync 함수 본문 안에서 Future를 반환하는 함수를 await하지 않거나 unawaited로 표시하지 않은 것을 Dart 분석기가 알려주는 린트(lint) 규칙이에요. 흔히 깜빡하고 await를 빼먹는 실수를 잡아줘요.

출처: unawaited_futures

본문

설명

async 함수 본문 안에서 FutureFutureOr을 반환하는 함수는 await 해야 해요 (DO). 이름 짓는 관례만으로는 메서드가 동기(sync)인지 비동기(async)인지 알 수 없으니(물론 dart:io의 일부 제외), async 메서드 안에서 await를 빼먹기 쉬워요.

정말로 fire-and-forget(던져두고 기다리지 않는) Future를 시작하고 싶다면, 권장하는 방법은 dart:asyncunawaited를 사용하는 거예요. // 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

더 알아보기