| Index: lib/pool.dart
|
| diff --git a/lib/pool.dart b/lib/pool.dart
|
| index 3279160be58a5785f4787a6d1a26d274c4d943ec..f7bfd828b8891c1d6b5dd99dc403072583e2aeb1 100644
|
| --- a/lib/pool.dart
|
| +++ b/lib/pool.dart
|
| @@ -106,16 +106,18 @@ class Pool {
|
| /// Future.
|
| ///
|
| /// The return value of [callback] is piped to the returned Future.
|
| - Future withResource(callback()) {
|
| + Future/*<T>*/ withResource/*<T>*/(/*=T*/ callback()) async {
|
| if (isClosed) {
|
| throw new StateError(
|
| "withResource() may not be called on a closed Pool.");
|
| }
|
|
|
| - // TODO(nweiz): Use async/await when sdk#23497 is fixed.
|
| - return request().then((resource) {
|
| - return new Future.sync(callback).whenComplete(resource.release);
|
| - });
|
| + var resource = await request();
|
| + try {
|
| + return await callback();
|
| + } finally {
|
| + resource.release();
|
| + }
|
| }
|
|
|
| /// Closes the pool so that no more resources are requested.
|
| @@ -189,7 +191,7 @@ class Pool {
|
| _onReleaseCompleters.removeFirst().completeError(error, stackTrace);
|
| });
|
|
|
| - var completer = new Completer.sync();
|
| + var completer = new Completer<PoolResource>.sync();
|
| _onReleaseCompleters.add(completer);
|
| return completer.future;
|
| }
|
|
|