description

# dart:async library

Support for asynchronous programming, with classes such as Future and Stream.

Futures and Streams are the fundamental building blocks of asynchronous programming in Dart. They are supported directly in the language through `async` and `async*` functions, and are available to all libraries through the `dart:core` library.

This library provides further tools for creating, consuming and transforming futures and streams, as well as direct access to other asynchronous primitives like Timer, scheduleMicrotask and Zone.

To use this library in your code:

    import 'dart:async';

## Future

A Future object represents a computation whose return value might not yet be available. The Future returns the value of the computation when it completes at some time in the future. Futures are often used for APIs that are implemented using a different thread or isolate (e.g., the asynchronous I/O operations of `dart:io` or HTTP requests of `dart:html`).

Many methods in the Dart libraries return `Future`s when performing tasks. For example, when binding an `HttpServer` to a host and port, the `bind()` method returns a Future.

     HttpServer.bind('127.0.0.1', 4444)
         .then((server) => print('${server.isBroadcast}'))
         .catchError(print);

Future.then registers a callback function that runs when the Future's operation, in this case the `bind()` method, completes successfully. The value returned by the operation is passed into the callback function. In this example, the `bind()` method returns the HttpServer object. The callback function prints one of its properties. Future.catchError registers a callback function that runs if an error occurs within the Future.

## Stream

A Stream provides an asynchronous sequence of data. Examples of data sequences include individual events, like mouse clicks, or sequential chunks of larger data, like multiple byte lists with the contents of a file such as mouse clicks, and a stream of byte lists read from a file. The following example opens a file for reading. Stream.listen registers callback functions that run each time more data is available, an error has occurred, or the stream has finished. Further functionality is provided on Stream, implemented by calling Stream.listen to get the actual data.

    Stream<List<int>> stream = File('quotes.txt').openRead();
    stream.transform(utf8.decoder).forEach(print);

This stream emits a sequence of lists of bytes. The program must then handle those lists of bytes in some way. Here, the code uses a UTF-8 decoder (provided in the `dart:convert` library) to convert the sequence of bytes into a sequence of Dart strings.

Another common use of streams is for user-generated events in a web app: The following code listens for mouse clicks on a button.

    querySelector('#myButton')!.onClick.forEach((_) => print('Click.'));

## Other resources

- The dart:async section of the library tour: A brief overview of asynchronous programming.

- Use Future-Based APIs: A closer look at Futures and how to use them to write asynchronous Dart code.

- Futures and Error Handling: Everything you wanted to know about handling errors and exceptions when working with Futures (but were afraid to ask).

- The Event Loop and Dart: Learn how Dart handles the event queue and microtask queue, so you can write better asynchronous code with fewer surprises.

- test package: Asynchronous Tests: How to test asynchronous code.

## Classes

Completer<T>
  A way to produce Future objects and to complete them later with a value or error.
EventSink<T>
  A Sink that supports adding errors.
Future<T>
  The result of an asynchronous computation.
FutureOr<T>
  A type representing values that are either `Future<T>` or `T`.
MultiStreamController<T>
  An enhanced stream controller provided by Stream.multi.
Stream<T>
  A source of asynchronous data events.
StreamConsumer<S>
  Abstract interface for a "sink" accepting multiple entire streams.
StreamController<T>
  A controller with the stream it controls.
StreamIterator<T>
  An Iterator-like interface for the values of a Stream.
StreamSink<S>
  A object that accepts stream events both synchronously and asynchronously.
StreamSubscription<T>
  A subscription on events from a Stream.
StreamTransformer<S, T>
  Transforms a Stream.
StreamTransformerBase<S, T>
  Base class for implementing StreamTransformer.
StreamView<T>
  Stream wrapper that only exposes the Stream interface.
SynchronousStreamController<T>
  A stream controller that delivers its events synchronously.
Timer
  A countdown timer that can be configured to fire once or repeatedly.
Zone
  A zone represents an environment that remains stable across asynchronous calls.
ZoneDelegate
  An adapted view of the parent zone.
ZoneSpecification
  A parameter object with custom zone function handlers for Zone.fork.

## Extensions

FutureExtensions on Future<T>
  Convenience methods on futures.
FutureIterable on Iterable<Future<T>>
FutureRecord2 on (Future<T1>, Future<T2>)
  Parallel operations on a record of futures.
FutureRecord3 on (Future<T1>, Future<T2>, Future<T3>)
  Parallel operations on a record of futures.
FutureRecord4 on (Future<T1>, Future<T2>, Future<T3>, Future<T4>)
  Parallel operations on a record of futures.
FutureRecord5 on (Future<T1>, Future<T2>, Future<T3>, Future<T4>, Future<T5>)
  Parallel operations on a record of futures.
FutureRecord6 on (Future<T1>, Future<T2>, Future<T3>, Future<T4>, Future<T5>, Future<T6>)
  Parallel operations on a record of futures.
FutureRecord7 on (Future<T1>, Future<T2>, Future<T3>, Future<T4>, Future<T5>, Future<T6>, Future<T7>)
  Parallel operations on a record of futures.
FutureRecord8 on (Future<T1>, Future<T2>, Future<T3>, Future<T4>, Future<T5>, Future<T6>, Future<T7>, Future<T8>)
  Parallel operations on a record of futures.
FutureRecord9 on (Future<T1>, Future<T2>, Future<T3>, Future<T4>, Future<T5>, Future<T6>, Future<T7>, Future<T8>, Future<T9>)
  Parallel operations on a record of futures.

## Functions

runZoned<R>(R body(), {Map<Object?, Object?>? zoneValues, ZoneSpecification? zoneSpecification, Function? onError}) → R
  Runs `body` in its own zone.
runZonedGuarded<R>(R body(), void onError(Object error, StackTrace stack), {Map<Object?, Object?>? zoneValues, ZoneSpecification? zoneSpecification}) → R?
  Runs `body` in its own error zone.
scheduleMicrotask(void callback()) → void
  Runs a function asynchronously.
unawaited(Future<void>? future) → void
  Explicitly ignores a future.

## Typedefs

ControllerCallback = void Function()
  Type of a stream controller's `onListen`, `onPause` and `onResume` callbacks.
ControllerCancelCallback = FutureOr<void> Function()
  Type of stream controller `onCancel` callbacks.
CreatePeriodicTimerHandler = Timer Function(Zone self, ZoneDelegate parent, Zone zone, Duration period, void f(Timer timer))
  The type of a custom Zone.createPeriodicTimer implementation function.
CreateTimerHandler = Timer Function(Zone self, ZoneDelegate parent, Zone zone, Duration duration, void f())
  The type of a custom Zone.createTimer implementation function.
ErrorCallbackHandler = AsyncError? Function(Zone self, ZoneDelegate parent, Zone zone, Object error, StackTrace? stackTrace)
  The type of a custom Zone.errorCallback implementation function.
ForkHandler = Zone Function(Zone self, ZoneDelegate parent, Zone zone, ZoneSpecification? specification, Map<Object?, Object?>? zoneValues)
  The type of a custom Zone.fork implementation function.
HandleUncaughtErrorHandler = void Function(Zone self, ZoneDelegate parent, Zone zone, Object error, StackTrace stackTrace)
  The type of a custom Zone.handleUncaughtError implementation function.
PrintHandler = void Function(Zone self, ZoneDelegate parent, Zone zone, String line)
  The type of a custom Zone.print implementation function.
RegisterBinaryCallbackHandler = ZoneBinaryCallback<R, T1, T2> Function<R, T1, T2>(Zone self, ZoneDelegate parent, Zone zone, R f(T1 arg1, T2 arg2))
  The type of a custom Zone.registerBinaryCallback implementation function.
RegisterCallbackHandler = ZoneCallback<R> Function<R>(Zone self, ZoneDelegate parent, Zone zone, R f())
  The type of a custom Zone.registerCallback implementation function.
RegisterUnaryCallbackHandler = ZoneUnaryCallback<R, T> Function<R, T>(Zone self, ZoneDelegate parent, Zone zone, R f(T arg))
  The type of a custom Zone.registerUnaryCallback implementation function.
RunBinaryHandler = R Function<R, T1, T2>(Zone self, ZoneDelegate parent, Zone zone, R f(T1 arg1, T2 arg2), T1 arg1, T2 arg2)
  The type of a custom Zone.runBinary implementation function.
RunHandler = R Function<R>(Zone self, ZoneDelegate parent, Zone zone, R f())
  The type of a custom Zone.run implementation function.
RunUnaryHandler = R Function<R, T>(Zone self, ZoneDelegate parent, Zone zone, R f(T arg), T arg)
  The type of a custom Zone.runUnary implementation function.
ScheduleMicrotaskHandler = void Function(Zone self, ZoneDelegate parent, Zone zone, void f())
  The type of a custom Zone.scheduleMicrotask implementation function.
ZoneBinaryCallback<R, T1, T2> = R Function(T1, T2)
  A two-argument function, like the argument to `Zone.runBinary`.
ZoneCallback<R> = R Function()
  A no-argument function, like the argument to `Zone.run`.
ZoneUnaryCallback<R, T> = R Function(T)
  A one-argument function, like the argument to `Zone.runUnary`.

## Exceptions / Errors

AsyncError
  An error and a stack trace.
DeferredLoadException
  Thrown when a deferred library fails to load.
ParallelWaitError<V, E>
  Error thrown when waiting for multiple futures, when some have errors.
TimeoutException
  Thrown when a scheduled timeout happens while waiting for an async result.