Обертывание метода, sync
, методом async
может иметь некоторые преимущества.Базовый метод по-прежнему будет синхронным, но вы можете перенести этот метод в другой поток, так что поток, который ожидал, теперь может продолжить свое выполнение.Таким образом, в вашем примере, если поток пользовательского интерфейса вызывает метод блокировки GetHTTPResource
, вы можете добиться отклика пользовательского интерфейса, перенеся этот метод в другой поток с помощью асинхронной оболочки.Я рекомендую вам это сообщение в блоге , которое, я думаю, поможет вам лучше понять, что подразумевает async
сверх sync
.( этот другой охватывает sync
более async
).
Если async
более sync
, поток все равно будет заблокирован.По этой причине в веб-приложении нет особого смысла, поэтому использование асинхронных упаковщиков для синхронных функций не имеет преимуществ в производительности.Цитирую вышеупомянутую статью (выделено мое):
Возможность асинхронного вызова синхронного метода ничего не делает для масштабируемости, потому что вы обычно все еще потребляете столько же ресурсов выЕсли бы вы вызывали его синхронно (на самом деле вы используете немного больше, поскольку при планировании чего-либо возникают накладные расходы), вы просто используете разные ресурсы для этого , например потокиз пула потоков вместо конкретного потока, в котором вы выполнялись.Преимущества масштабируемости, заявленные для асинхронных реализаций, достигаются за счет уменьшения количества ресурсов, которые вы используете, и это необходимо интегрировать в реализацию асинхронного метода ... это не то, что достигается путем обтекания.
Например, в случае ASP.NET-приложения полностью async
код позволяет потокам обрабатывать новые запросы, в то время как другие запросы ожидают завершения операций ввода-вывода, что обеспечивает более высокую масштабируемость.С другой стороны, если код имеет базовые синхронные методы для операций ввода-вывода, будут блокироваться потоки, которые не смогут ничего делать, кроме как ждать завершения этих операций.Так что async
более sync
обычно не дает никаких преимуществ в случае веб-приложений.