В настоящее время я начинаю создавать приложение, которое получило бы много пользы от функции async-await в C # 5. Но я не уверен, какую версию VS и асинхронной среды выполнения использовать.
Если посмотреть на графики популярности ОС, мне нужно будет поддерживать Windows XP еще около трех лет. Похоже, что .net 4.5 работает только в более новых версиях Windows, поэтому мне нужно настроить таргетинг на .net 4.0. На машинах для разработки используется Windows 7, поэтому использование более новой версии VS не проблема.
Теперь мне нужно сначала выбрать компилятор для этого:
- VS2010 с AsyncCTP
- Предварительный просмотр VS2012 (и окончательный, когда он появится), установив цель на .net 4.0
- Mono (похоже, что 2.12 имеет async-await, я предпочитаю / использую VS, а не MonoDevelop как IDE)
У какого из них меньше ошибок генерации кода? Глядя на блог Джона Скита, в VS2012 Preview никогда не используется генератор кода, чем CTP.
И что еще более важно, какую среду выполнения использовать?
Содержит ли VS2012 распространяемую асинхронную среду выполнения для использования с .net 4?
Мне удалось скомпилировать код с предварительным просмотром, обратившись к среде выполнения AsyncCTP. Но поскольку у CTP странные условия лицензирования, это не похоже на хорошее долгосрочное решение.
Или мне следует использовать стороннюю реализацию? Может, у моно есть?
Для распространения библиотеки я предпочитаю просто поместить dll в тот же каталог, что и приложение, а не какой-то установщик.
Также хотелось бы, чтобы мои двоичные файлы работали без изменений на моно + Linux / MacOS. Таким образом, среда выполнения должна быть совместима с любым встроенным моно (вероятно, 2.12) или разрешать использование в операционных системах, отличных от Windows.
Ответы:
Microsoft выпустила пакет Async Targeting Pack (Microsoft.Bcl.Async) через Nuget в качестве замены AsyncCTP.
Подробнее об этом можно прочитать здесь: http://blogs.msdn.com/b/bclteam/archive/2013/04/17/microsoft-bcl-async-is-now-stable.aspx .
Вы можете прочитать о предыдущей версии здесь: http://blogs.msdn.com/b/lucian/archive/2012/04/24/async-targeting-pack.aspx .
Поскольку этот пакет официально поддерживается, теперь я считаю, что лучшим вариантом для таргетинга XP + async было бы использование Visual Studio 2012 + C # 5 + Async Targeting Pack.
Если вы чувствуете необходимость нацелиться на .NET 3.5, вы все равно можете использовать (мой) AsyncBridge для .NET 3.5 .
источник
Если вы готовы рассмотреть другие языки .Net, F # может решить вашу проблему. В нем уже много лет используется выражение вычисления async {}, и он обратно совместим даже с .Net 2.0. Минимальное требование - Windows XP SP3. Среду выполнения можно скачать здесь .
источник
Можно использовать бета-версию VS 12 для таргетинга на .NET 4.0 с помощью async / await.
Вам нужно скопировать в свой проект код, который предоставляет типы, на которые опирается компилятор.
Подробности здесь
Изменить: мы взяли эту технику и превратили ее в библиотеку с открытым исходным кодом под названием AsyncBridge: https://nuget.org/packages/AsyncBridge
источник
Если вы хотите иметь возможность распространять свое программное обеспечение, я думаю, что решение Mono - действительно ваш единственный вариант прямо сейчас. Вы также говорите, что хотите, чтобы конечный результат работал на Mono поверх Linux и OS X. Ориентация на Mono для начала кажется естественным решением.
Ваша следующая проблема - IDE. Очевидно, что MonoDevelop будет работать хорошо, но вы говорите, что предпочитаете Visual Studio.
Грег Херлман создал профиль для программирования против Mono 2.8 из Visual Studio. Если вы проследите за ним, он может указать вам правильное направление для разработки против Mono 2.11 / 2.12 в Visual Studio.
Конечно, есть также Mono Tools для Visual Studio , коммерческий продукт. Я предполагаю, что Xamarin по-прежнему предлагает его .
Вы также можете запустить необходимые сборки профиля 4.5 из Mono поверх .NET, но я этого не пробовал. Профиль 4.5 - это строгий надстройка API 4.0. Возможно, попробуй и доложи.
РЕДАКТИРОВАТЬ: Похоже, что теперь вы можете использовать Visual Studio Async CTP в производстве
Вот что написано на странице загрузки :
источник
Async...Builder
и...Awaiter
) очень трудно отделить от остальной части моно. В настоящее время я рассматриваю возможность повторной реализацииAsyncCtpLibrary
, возможно, немного позаимствовав у моно.AsyncCtpLibrary
касается распространения , я знаю, что это в принципе возможно, но, с одной стороны, лицензия содержит несколько странных положений. Но моя главная проблема здесь в том, что происходит в долгосрочной перспективе. Если он станет неподдерживаемым, и никто не исправил в нем ошибки, это может раздражать.Если вы хотите начать распространение своего программного обеспечения после того, как MS выпустит C # 5.0, вы можете начать разработку с использованием AsycnCTP. В противном случае я бы не рекомендовал вам его использовать, так как это всего лишь CTP, даже не бета. Его можно сильно изменить ближе к стадии бета-тестирования и к релизу. Может быть нестабильным и т. Д.
Если вы хотите внедрить простые асинхронные операции в свое приложение, я бы порекомендовал вам использовать Reactive Extensions и прочее, построенное поверх (Reactive UI и т. Д.), Это просто красиво.
Что касается VS2012, он также содержит тот же самый Async CTP, насколько я помню из моей // сборки / планшета, который MS дал мне на этой конференции.
источник