Index: packages/async/README.md |
diff --git a/packages/async/README.md b/packages/async/README.md |
index 3820f0649d3bec93e68cae91f2dbd93323a26d2f..60e7b0bf7c4125db2bdcd5e5d51f02f88049a96a 100644 |
--- a/packages/async/README.md |
+++ b/packages/async/README.md |
@@ -1,28 +1,93 @@ |
-# Async utilities package |
+Contains utility classes in the style of `dart:async` to work with asynchronous |
+computations. |
-Contains tools to work with asynchronous computations. |
+* The [`AsyncCache`][AsyncCache] class allows expensive asynchronous |
+ computations values to be cached for a period of time. |
-The package contains `Stream` and `Future` related functionality, |
-as well as sub-libraries with different utilities. |
+* The [`AsyncMemoizer`][AsyncMemoizer] class makes it easy to only run an |
+ asynchronous operation once on demand. |
-### Zipping streams |
+* The [`CancelableOperation`][CancelableOperation] class defines an operation |
+ that can be canceled by its consumer. The producer can then listen for this |
+ cancellation and stop producing the future when it's received. It can be |
+ created using a [`CancelableCompleter`][CancelableCompleter]. |
-The "stream_zip.dart" sub-library contains functionality |
-to combine several streams of events into a single stream of tuples of events. |
+* The delegating wrapper classes allow users to easily add functionality on top |
+ of existing instances of core types from `dart:async`. These include |
+ [`DelegatingFuture`][DelegatingFuture], |
+ [`DelegatingStream`][DelegatingStream], |
+ [`DelegatingStreamSubscription`][DelegatingStreamSubscription], |
+ [`DelegatingStreamConsumer`][DelegatingStreamConsumer], |
+ [`DelegatingSink`][DelegatingSink], |
+ [`DelegatingEventSink`][DelegatingEventSink], and |
+ [`DelegatingStreamSink`][DelegatingStreamSink]. |
-### Results |
-The "result.dart" sub-library introduces a `Result` class that can hold either |
-a value or an error. |
-It allows capturing an asynchronous computation which can give either a value |
-or an error, into an asynchronous computation that always gives a `Result` |
-value, where errors can be treated as data. |
-It also allows releasing the `Result` back into an asynchronous computation. |
+ The delegating classes all have `.typed()` constructors which allow users to |
+ cast the generic type parameters in a way that's safe for strong mode. For |
+ example, if `future` is a `Future<dynamic>` and you know it actually contains an |
+ `int`, you can write `DelegatingFuture.typed<int>(future)`. |
-### History. |
-This package is unrelated to the discontinued `async` package with version 0.1.7. |
+* The [`FutureGroup`][FutureGroup] class makes it easy to wait until a group of |
+ features that may change over time completes. |
-## Features and bugs |
+* The [`LazyStream`][LazyStream] class allows a stream to be initialized lazily |
+ when `.listen()` is first called. |
-Please file feature requests and bugs at the [issue tracker][tracker]. |
+* The [`NullStreamSink`][NullStreamSink] class is an implementation of |
+ `StreamSink` that discards all events. |
-[tracker]: https://github.com/dart-lang/async/issues |
+* The [`RestartableTimer`][RestartableTimer] class extends `Timer` with a |
+ `reset()` method. |
+ |
+* The [`Result`][Result] class that can hold either a value or an error. It |
+ provides various utilities for converting to and from `Future`s and `Stream`s. |
+ |
+* The [`StreamGroup`][StreamGroup] class merges a collection of streams into a |
+ single output stream. |
+ |
+* The [`StreamQueue`][StreamQueue] class allows a stream to be consumed |
+ event-by-event rather than being pushed whichever events as soon as they |
+ arrive. |
+ |
+* The [`StreamSplitter`][StreamSplitter] class allows a stream to be duplicated |
+ into multiple identical streams. |
+ |
+* The [`StreamZip`][StreamZip] class combines multiple streams into a single |
+ stream of lists of events. |
+ |
+* This package contains a number of [`StreamTransformer`][StreamTransformer]s. |
+ [`SingleSubscriptionTransformer`][SingleSubscriptionTransformer] converts a |
+ broadcast stream to a single-subscription stream, and |
+ [`typedStreamTransformer`][typedStreamTransformer] casts the type of a |
+ `Stream`. It also defines a transformer type for [`StreamSink`][StreamSink]s, |
+ [`StreamSinkTransformer`][StreamSinkTransformer]. |
+ |
+* The [`SubscriptionStream`][SubscriptionStream] class wraps a |
+ `StreamSubscription` so it can be re-used as a `Stream`. |
+ |
+[AsyncCache]: https://www.dartdocs.org/documentation/async/latest/async/AsyncCache-class.html |
+[AsyncMemoizer]: https://www.dartdocs.org/documentation/async/latest/async/AsyncMemoizer-class.html |
+[CancelableCompleter]: https://www.dartdocs.org/documentation/async/latest/async/CancelableCompleter-class.html |
+[CancelableOperation]: https://www.dartdocs.org/documentation/async/latest/async/CancelableOperation-class.html |
+[DelegatingEventSink]: https://www.dartdocs.org/documentation/async/latest/async/DelegatingEventSink-class.html |
+[DelegatingFuture]: https://www.dartdocs.org/documentation/async/latest/async/DelegatingFuture-class.html |
+[DelegatingSink]: https://www.dartdocs.org/documentation/async/latest/async/DelegatingSink-class.html |
+[DelegatingStreamConsumer]: https://www.dartdocs.org/documentation/async/latest/async/DelegatingStreamConsumer-class.html |
+[DelegatingStreamSink]: https://www.dartdocs.org/documentation/async/latest/async/DelegatingStreamSink-class.html |
+[DelegatingStreamSubscription]: https://www.dartdocs.org/documentation/async/latest/async/DelegatingStreamSubscription-class.html |
+[DelegatingStream]: https://www.dartdocs.org/documentation/async/latest/async/DelegatingStream-class.html |
+[FutureGroup]: https://www.dartdocs.org/documentation/async/latest/async/FutureGroup-class.html |
+[LazyStream]: https://www.dartdocs.org/documentation/async/latest/async/LazyStream-class.html |
+[NullStreamSink]: https://www.dartdocs.org/documentation/async/latest/async/NullStreamSink-class.html |
+[RestartableTimer]: https://www.dartdocs.org/documentation/async/latest/async/RestartableTimer-class.html |
+[Result]: https://www.dartdocs.org/documentation/async/latest/async/Result-class.html |
+[SingleSubscriptionTransformer]: https://www.dartdocs.org/documentation/async/latest/async/SingleSubscriptionTransformer-class.html |
+[StreamGroup]: https://www.dartdocs.org/documentation/async/latest/async/StreamGroup-class.html |
+[StreamQueue]: https://www.dartdocs.org/documentation/async/latest/async/StreamQueue-class.html |
+[StreamSinkTransformer]: https://www.dartdocs.org/documentation/async/latest/async/StreamSinkTransformer-class.html |
+[StreamSink]: https://api.dartlang.org/stable/latest/dart-async/StreamSink-class.html |
+[StreamSplitter]: https://www.dartdocs.org/documentation/async/latest/async/StreamSplitter-class.html |
+[StreamTransformer]: https://api.dartlang.org/stable/latest/dart-async/StreamTransformer-class.html |
+[StreamZip]: https://www.dartdocs.org/documentation/async/latest/async/StreamZip-class.html |
+[SubscriptionStream]: https://www.dartdocs.org/documentation/async/latest/async/SubscriptionStream-class.html |
+[typedStreamTransformer]: https://www.dartdocs.org/documentation/async/latest/async/typedStreamTransformer.html |