а че за правила в "асинках"?, никогда не слышал о них, это же примитивная хуйня, че там за правила могут быть)
Скорее не правила а нюансы использования и рекомендации
1. Async void - абсолютное зло
2. Ожидать таску синхронно - зло поменьше, избегать всеми силами ибо дедлоки и прочая хня
3. ConfigureAwait в либах, особенно в IO
4. Task не всегда = новый поток
5. Если что-то нужно запустить в новом потоке - Task.Run() если таск условно короткоживущий. Если не коротко живущий - всякие хостедсервисы и тредпул в помощь
6. Если есть много асинхронщины и набор возвращаемых значений конечен и известен - кеширование и ValueTask в помощь