I/O → async end-to-end; sync-over-async вреден; CPU-only может быть sync; не провоцируйте .Result.
Разбор
- Дубли sync/async — только при нужде.
- CancellationToken в async методах.
- Документируйте потокобезопасность.
- ValueTask точечно.
Итог
Публичный API отражает природу работы: I/O → async.