using<T extends Disposable, R> function
Implementation
Future<R> using<T extends Disposable, R>(T value, UsingBody<T, R> body) async {
AsyncDisposable disp;
if (value is SyncDisposable) {
value.throwIfNotAvailable();
disp = value.asAsync();
} else if (value is AsyncDisposable) {
value.throwIfNotAvailable();
disp = value;
} else {
throw UnknownDisposableException(value);
}
try {
return await body(value);
} finally {
await disp.dispose();
}
}