The problem is async pipe just marks the component and all its ancestors as dirty. It needs zone.js microtask queue to exhaust until ApplicationRef.tick is called to render_creator all dirty marked components.
Every solution has a cost . Every decision has a tradeoff