Timer.run în Dart

Rulează o funcție cât mai curând, ca eveniment nou, după codul curent și după microtask-uri (Timer cu durata zero).

Sintaxă
static void run(void callback())

Ce face Timer.run

Timer.run(f) este echivalent cu Timer(Duration.zero, f): funcția rulează în coada de evenimente, imediat ce codul sincron curent și toate microtask-urile s-au terminat.

Este util când vrei să lași programul să termine ce face acum (de exemplu să actualizeze o stare) înainte de pasul următor.

Parametri

Parametru Descriere
callback Funcția rulată.

Ce returnează

Nimic (void).

Exemple

Exemplul 1: După microtask-uri, ca eveniment

import 'dart:async';

Future<void> main() async {
  Timer.run(() => print('3. Timer.run'));
  scheduleMicrotask(() => print('2. microtask'));
  print('1. cod sincron');
  await Future.delayed(const Duration(milliseconds: 10));
}

Rezultat

1. cod sincron
2. microtask
3. Timer.run

Exemplul 2: Ordinea mai multor Timer.run

import 'dart:async';

Future<void> main() async {
  for (final oras in ['Iași', 'Cluj', 'Brașov']) {
    Timer.run(() => print('procesez $oras'));
  }
  print('am programat toate orașele');
  await Future.delayed(const Duration(milliseconds: 10));
}

Rezultat

am programat toate orașele
procesez Iași
procesez Cluj
procesez Brașov

Greșeli frecvente

  • Te aștepți ca Timer.run să ruleze înaintea unui microtask programat după el. Microtask-urile au întâietate.

Comenzi înrudite

  • Timer: Rulează o funcție o dată, după o durată dată; cancel îl oprește înainte, isActive spune dacă mai așteaptă.
  • scheduleMicrotask: Programează o funcție să ruleze imediat după codul sincron curent, înaintea timerelor și a altor evenimente.
  • Future: O valoare care va fi gata mai târziu (citirea unui fișier, un răspuns de la server); o aștepți cu await.