Ответ 1
Если вы не вернете поток, то асинхронный результат каждой задачи не будет ожидаться его вызывающим абонентом и никакими зависимыми задачами.
Например, когда не возвращаются потоки:
$ gulp scripts
[21:25:05] Using gulpfile ~/my-project/gulpfile.js
[21:25:05] Starting 'tsc'...
[21:25:05] Finished 'tsc' after 13 ms
[21:25:05] Starting 'scripts'...
[21:25:05] Finished 'scripts' after 10 ms
[21:25:05] Compiling TypeScript files using tsc version 1.0.1.0
Обратите внимание, что задача scripts
зависит от задачи tsc
. Сообщается, что tsc
завершается за 13 миллисекунд, что, безусловно, слишком быстро, чтобы разумно полагаться. Затем задача scripts
появляется, чтобы начать и завершить, снова за очень небольшой промежуток времени. Наконец, начинается фактическая операция, выполняемая tsc
. Очевидно, что ни tsc
, ни scripts
не ожидали завершения этапа компиляции.
Когда эти задачи возвращают свои потоки, вывод выглядит совсем по-другому:
$ gulp scripts
[21:42:25] Using gulpfile ~/my-project/gulpfile.js
[21:42:25] Starting 'tsc'...
[21:42:25] Compiling TypeScript files using tsc version 1.0.1.0
[21:42:32] Finished 'tsc' after 6.65 s
[21:42:32] Starting 'scripts'...
[21:42:32] Finished 'scripts' after 204 ms
Здесь последовательность имеет смысл, и заявленная продолжительность соответствует ожиданиям.