У меня есть многоуровневое веб-приложение С# MVC4 в сценарии с высоким трафиком, в котором используется инъекция зависимостей для разных репозиториев. Это очень полезно, потому что оно легко проверяемо, и в процессе производства мы можем легко настроить хранилища для конкретных контроллеров. Все контроллеры наследуются от AsyncController, поэтому методы действий, возвращающие Task<JsonResult>
или Task<ActionResult>
, действительно помогают нашему серверу масштабироваться с большим количеством пользователей и решить проблему голодного нити. В некоторых хранилищах используются веб-службы, которые мы можем определенно использовать Async/Await для обеспечения преимуществ масштабируемости. В других случаях некоторые могут использовать неуправляемые службы, которые не могут быть надежно загружены, в которых async/await не будет предоставлять никаких преимуществ. Каждый репозиторий представляет собой реализацию интерфейса, IRepository. Короче говоря, каждая реализация сильно различается в способе получения данных. Эта конфигурация выбирается во время развертывания с изменениями web.config и модулями Autofac.
Каковы некоторые из рекомендуемых способов реализации async/wait в приложении, таком как это? Чтобы сделать шаблон подходящим в моем существующем приложении, я должен изменить интерфейс, чтобы вернуть Task<MyBusinessObject>
. Но не больше ли это детали реализации? Я мог бы предоставить два окурка метода GetData
и GetDataAsync
, но для меня это не позволило бы гибкости, которая у меня есть теперь с каркасами IoC, такими как Autofac, где я могу легко заменить все, не изменяя код.
Один из разработчиков Microsoft для Async/Await опубликовал сообщение в блоге: " Должен ли я подвергать асинхронную оболочку для моих синхронных методов?" этот вопрос входит в проблему. Если ваш метод асинхронизации не является по-настоящему асинхронным (обеспечивающим собственные преимущества ввода-вывода), тогда он действительно только увеличивает накладные расходы. Другими словами, он не будет предоставлять никаких преимуществ масштабируемости.
Мне просто хотелось бы, чтобы остальная часть Сообщества занялась этой проблемой.