commit | 650e5d3eff10529c65ef45b5fcb4bca270c7ea8f | [log] [tgz] |
---|---|---|
author | dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> | Mon Apr 03 14:35:25 2023 -0700 |
committer | GitHub <noreply@github.com> | Mon Apr 03 14:35:25 2023 -0700 |
tree | 553bd6a0ea6fe97240263fa674a907110e058a00 | |
parent | 338bfb4e96ba04ae166a5d76249f66fb8284f4b3 [diff] |
Bump actions/checkout from 3.3.0 to 3.5.0 (#66) Bumps [actions/checkout](https://github.com/actions/checkout) from 3.3.0 to 3.5.0. - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/checkout/compare/ac593985615ec2ede58e132d2e21d2b1cbd6127c...8f4b7f84864484a7bf31766abe9204da3cbe65b3) --- updated-dependencies: - dependency-name: actions/checkout dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
The pool package exposes a Pool
class which makes it easy to manage a limited pool of resources.
The easiest way to use a pool is by calling withResource
. This runs a callback and returns its result, but only once there aren't too many other callbacks currently running.
// Create a Pool that will only allocate 10 resources at once. After 30 seconds // of inactivity with all resources checked out, the pool will throw an error. final pool = new Pool(10, timeout: new Duration(seconds: 30)); Future<String> readFile(String path) { // Since the call to [File.readAsString] is within [withResource], no more // than ten files will be open at once. return pool.withResource(() => new File(path).readAsString()); }
For more fine-grained control, the user can also explicitly request generic PoolResource
objects that can later be released back into the pool. This is what withResource
does under the covers: requests a resource, then releases it once the callback completes.
Pool
ensures that only a limited number of resources are allocated at once. It‘s the caller’s responsibility to ensure that the corresponding physical resource is only consumed when a PoolResource
is allocated.
class PooledFile implements RandomAccessFile { final RandomAccessFile _file; final PoolResource _resource; static Future<PooledFile> open(String path) { return pool.request().then((resource) { return new File(path).open().then((file) { return new PooledFile._(file, resource); }); }); } PooledFile(this._file, this._resource); // ... Future<RandomAccessFile> close() { return _file.close.then((_) { _resource.release(); return this; }); } }