using<R> function
Runs computation
with a new Arena, and releases all allocations at the
end.
If the return value of computation
is a Future, all allocations are
released when the future completes.
If the isolate is shut down, through Isolate.kill()
, resources are not
cleaned up.
Implementation
R using<R>(R Function(Arena) computation,
[Allocator wrappedAllocator = calloc]) {
final arena = Arena(wrappedAllocator);
var isAsync = false;
try {
final result = computation(arena);
if (result is Future) {
isAsync = true;
return result.whenComplete(arena.releaseAll) as R;
}
return result;
} finally {
if (!isAsync) {
arena.releaseAll();
}
}
}