release method

Future<void> release()

Emits all buffered output to stdout and stderr.

Returns a future that completes once all output has been emitted. If the script hasn't completed yet, the returned future will block until it does. However, unlike done, the returned future will not emit an error even if the script fails.

Implementation

Future<void> release() => _releaseMemo.runOnce(() async {
      _stdoutCompleter?.setSourceStream(_stdoutBuffer!.stream);
      _stderrCompleter.setSourceStream(_stderrBuffer.stream);

      var stdoutBuffer = _stdoutBuffer;
      await Future.wait(
          [if (stdoutBuffer != null) stdoutBuffer.done, _stderrBuffer.done]);

      // Give outer stdio listeners a chance to handle the IO.
      await Future<void>.delayed(Duration.zero);
    });