Promise
, возвращаемое из start
, сохраняется только после того, как любой полученный Supply
выходных потоков доставил все свои события.Это означает, что можно предположить, что все выходные данные были доставлены к моменту сохранения Promise
, что в целом значительно упрощает работу с Proc::Async
(без такого поведения мы, вероятно, увидели бы большое количество программ с ошибками, которые теряют вывод),Однако, если это Supply
никогда не происходит, то это невозможно, поэтому зависание.
Решение состоит в том, чтобы .tap
stdout
Supply
без предоставления какого-либо обратного вызова:
$proc.stdout(:bin).tap;
, который просто отбрасывает вывод.