На кой чёрт вообще нужна вся эта обвязка с созданием поля корутины, и стопом корутины в бесконечном цикле, когда всё делается ради одного флага?
И всё это изначально можно засунуть в
while (Advertisment.IsReady(type) == false)
?
Дополнительный код, дополнительные сущности, и жёсткий тупняк.
И в этом примере ещё норм. Этот чувак просто обожает корутины и ненавидит апдейты. Поэтому он использует очень много корутин там, где они не нужны. И обожает их останавливать извне, ломая в принципе парадигму целостности структуры кода.