sleep în Dart

Oprește complet execuția programului (isolate-ul curent) pentru durata dată; nimic altceva nu rulează între timp.

Sintaxă
void sleep(Duration duration)

Ce face sleep

sleep(const Duration(seconds: 2)) din dart:io blochează isolate-ul curent pentru durata dată. În acest timp nu rulează nici timere, nici Future-uri, nici cereri HTTP: totul așteaptă până se termină pauza.

Este potrivit pentru scripturi simple de consolă (o pauză între încercări, o animație de text). În cod asincron, pe server sau în Flutter folosește await Future.delayed(durata), care așteaptă fără să blocheze restul programului.

Parametri

Parametru Descriere
duration Cât timp stă programul pe loc; un Duration.

Exemple

Exemplul 1: Pauză măsurată cu Stopwatch

import 'dart:io';

void main() {
  final cronometru = Stopwatch()..start();
  sleep(const Duration(milliseconds: 250));
  cronometru.stop();
  print('Au trecut cel puțin 250 ms: ${cronometru.elapsedMilliseconds >= 250}');
}

Rezultat

Au trecut cel puțin 250 ms: true

Exemplul 2: Reîncercări cu pauză între ele

import 'dart:io';

var incercari = 0;

bool conecteaza() {
  incercari++;
  return incercari == 3;
}

void main() {
  for (var i = 1; i <= 5; i++) {
    if (conecteaza()) {
      print('Conectat la încercarea $i.');
      return;
    }
    print('Încercarea $i a eșuat, aștept...');
    sleep(const Duration(milliseconds: 100));
  }
  print('Nu m-am putut conecta.');
}

Rezultat

Încercarea 1 a eșuat, aștept...
Încercarea 2 a eșuat, aștept...
Conectat la încercarea 3.

Exemplul 3: sleep blochează și timerele

Timerul de 10 ms ar trebui să ruleze în timpul pauzei, dar sleep oprește tot isolate-ul, așa că apare abia după.

import 'dart:async';
import 'dart:io';

void main() {
  Timer(const Duration(milliseconds: 10), () => print('timer (10 ms)'));
  print('încep pauza de 200 ms');
  sleep(const Duration(milliseconds: 200));
  print('pauza s-a terminat');
}

Rezultat

încep pauza de 200 ms
pauza s-a terminat
timer (10 ms)

Greșeli frecvente

  • Folosești sleep într-un server HTTP: cât doarme, serverul nu răspunde la nicio cerere. Folosește await Future.delayed(...).
  • Scrii sleep(2): funcția primește un Duration, nu un număr de secunde.

Comenzi înrudite

  • exit: Oprește imediat programul cu codul de ieșire dat: 0 pentru succes, altă valoare pentru eroare.
  • Process.kill: kill trimite un semnal de oprire unui proces pornit cu Process.start; pid este numărul procesului dat de sistem.
  • HttpServer: HttpServer.bind pornește un server web pe o adresă și un port; serverul este un flux de cereri (HttpRequest).