Использование async-await в.net 4

В настоящее время я начинаю создавать приложение, которое получит большую выгоду от функции асинхронного ожидания 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 в тот же каталог, что и приложение, а не в какой-то инсталлятор.

Я также хотел бы, чтобы мои двоичные файлы работали без изменений на mono+Linux/MacOS. Таким образом, среда выполнения должна быть либо совместима с тем, что встроено в mono (возможно, 2.12), либо разрешать использование в ОС не Windows.

5 ответов

Решение

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 + было бы использование 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 в производстве сейчас

Вот что написано на странице загрузки:

Включает новое лицензионное соглашение для производственного использования. Примечание. Эта лицензия не является стимулом для использования CTP для производственного кода. CTP остается неподдерживаемым и предварительным обзором технологии "используйте на свой страх и риск". Однако мы получили много запросов от разработчиков на использование CTP для производственного кода, и поэтому мы изменили лицензию, чтобы разрешить это.

Если вы хотите начать распространять свое программное обеспечение после выпуска MS C# 5.0, то вы можете начать разработку с использованием AsycnCTP. В противном случае я бы не советовал вам его использовать, так как это всего лишь CTP, даже не бета. Это может быть изменено очень близко к бета-стадии и релизу. Это может быть нестабильно и т. Д.

Если вы хотите внедрить в ваше приложение простые асинхронные операции, я бы порекомендовал вам использовать Reactive Extensions и другие компоненты, встроенные в него (Reactive UI и т. Д.), Это просто красиво.

Что касается VS2012, он также содержит тот же Async CTP, насколько я помню из моего //Build/ tablet MS, предоставленного мне на этой конференции.

Другие вопросы по тегам