Шаблон async-await.net 4.5 - это изменение парадигмы. Это почти слишком хорошо, чтобы быть правдой.
Я переносил некоторый IO-тяжелый код в async-wait, потому что блокирование ушло в прошлое.
Довольно много людей сравнивают ожидания async с заражением зомби, и я нашел его довольно точным. Async-код любит другой асинхронный код (вам нужна функция async для ожидания функции async). Таким образом, все больше функций становятся асинхронными, и это продолжает расти в вашей кодовой базе.
Изменение функций для async - несколько повторяющаяся и невообразимая работа. Бросьте ключевое слово async
в объявление, оберните возвращаемое значение Task<>
, и вы в значительной степени выполнили. Это довольно тревожно, насколько легко весь процесс, и довольно скоро текстовое замещение script автоматизирует большую часть "портирования" для меня.
И теперь вопрос.. Если весь мой код медленно поворачивает async, почему бы просто не сделать все асинхронным по умолчанию?
Очевидная причина, по которой я предполагаю, - это производительность. Async-await имеет свои служебные данные и код, который не должен быть асинхронным, предпочтительно не должен. Но если производительность является единственной проблемой, то некоторые умные оптимизации могут автоматически удалить служебные данные, когда это не понадобится. Я читал об оптимизации "быстрый путь" , и мне кажется, что только он должен позаботиться об этом.
Возможно, это сопоставимо с сдвигом парадигмы, вызванным сборщиками мусора. В первые дни GC освобождение собственной памяти было определенно более эффективным. Но массы по-прежнему выбрали автоматическую сборку в пользу более безопасного, более простого кода, который может быть менее эффективным (и даже это, возможно, больше не соответствует действительности). Может быть, это должно быть здесь? Почему не все функции должны быть асинхронными?