Использование async-await в .net 4 - PullRequest
136 голосов
/ 02 февраля 2012

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

И, что более важно, какую среду выполнения использовать?

Содержит ли VS2012 распространяемую асинхронную среду выполнения для использования с .net 4?

Мне удалось скомпилировать код с предварительным просмотром, ссылаясь на среду выполнения AsyncCTP.Но поскольку CTP имеет странные условия лицензирования, это не похоже на хорошее долгосрочное решение.

Или я должен использовать стороннюю реализацию?Возможно, у mono есть один?

Для распространения библиотеки я предпочитаю просто помещать dll в тот же каталог, что и приложение, а не в какой-то инсталлятор.

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

Ответы [ 5 ]

106 голосов
/ 27 апреля 2012

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 + будет использование VisualStudio 2012 + C # 5 + Async Targeting Pack.

Если вы чувствуете необходимость нацелиться на .NET 3.5, вы все равно можете использовать (мой) AsyncBridge для .NET 3.5 .

24 голосов
/ 26 марта 2012

Если вы открыты для рассмотрения других языков .Net, F # может решить вашу проблему. В течение многих лет он имел выражение async {} и обратно совместим даже с .Net 2.0. Минимальное требование - Windows XP SP3. Время выполнения можно скачать здесь .

3 голосов
/ 09 апреля 2012

Можно использовать бета-версию VS 12 для нацеливания на .NET 4.0 с помощью async / await.

Вам необходимо скопировать в свой проект код, который предоставляет типы, на которые опирается компилятор.1004 * Подробности здесь

Редактировать: мы взяли эту технику и превратили ее в библиотеку с открытым исходным кодом под названием AsyncBridge: https://nuget.org/packages/AsyncBridge

3 голосов
/ 08 февраля 2012

Если вы хотите иметь возможность распространять свое программное обеспечение, я думаю, что решение Mono действительно является вашим единственным вариантом прямо сейчас.Вы также говорите, что хотите, чтобы конечный результат выполнялся в Mono на Linux и OS X. Таргетинг Mono для начала кажется естественным решением.

Ваша следующая проблема - IDE.MonoDevelop, очевидно, будет работать хорошо, но вы говорите, что предпочитаете Visual Studio.

Грег Херлман создал профиль для кодирования Mono 2.8 из Visual Studio.Если вы свяжетесь с ним, он может указать вам правильное направление для разработки против Mono 2.11 / 2.12 в Visual Studio.

Конечно, есть также Инструменты Mono для Visual Studio, который является коммерческим продуктом.Я предполагаю, что он все еще предлагается Xamarin .

Вы также можете запустить требуемые сборки профиля 4.5 из Mono поверх .NET, но я не пробовал этого.Профиль 4.5 является строгим супер-набором API 4.0.Возможно, сделайте попытку и доложите.

РЕДАКТИРОВАТЬ: похоже, вы можете использовать Visual Studio Async CTP в производстве сейчас

Вот что говорится страница загрузки :

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

2 голосов
/ 06 февраля 2012

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

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

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

...