Таким же, как и async. Пролазит сквозь весь стэк вызовов, если внизу тебе нужно делать что-то с IO, а сверху иметь возможность это контролировать как-то. Или я не прав в этом?
Это же разные вещи, не? async вынуждает делать все функции асинхронными, даже если это и не понадобится, а context можно либо не использовать совсем, либо передавать любой другой