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

В настоящее время я начинаю создавать приложение, которое принесет много пользы от функции асинхронного ожидания С# 5. Но я не уверен, какую версию VS и время выполнения async использовать.

Глядя на диаграммы популярности ОС, мне нужно будет поддерживать Windows XP еще три года или около того. Похоже, что .net 4.5 работает только на более новых версиях Windows, поэтому мне нужно настроить таргетинг на .net 4.0. Машины для разработки используют Windows 7, поэтому использование более новой версии VS не является проблемой.

Теперь мне нужно сначала выбрать компилятор для этого:

  • VS2010 с AsyncCTP
  • Предварительный просмотр VS2012 (и окончательный после его поступления), установив цель в .net 4.0
  • Моно (Похоже, 2.12 ожидает асинхронного ожидания, я предпочитаю/использую VS для MonoDevelop как IDE)

У кого меньше ошибок кода? Глядя на блог Jon Skeet, VS2012 Preview использует никогда не генератор кода, чем CTP.

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

Поддерживает ли VS2012 распространяемое время выполнения async для использования с .net 4?

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

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

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

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

Ответ 1

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 + С# 5 + Async Targeting Pack.

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

Ответ 2

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

Ответ 3

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

Следующий вопрос - это IDE. Очевидно, что MonoDevelop работает хорошо, но вы говорите, что предпочитаете Visual Studio.

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

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

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

EDIT: похоже, что вы можете использовать Visual Studio Async CTP в настоящее время

Вот что он говорит на странице download:

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

Ответ 4

Возможно использование бета-версии VS 12 для целевой .NET 4.0 с использованием async/wait.

Вам нужно скопировать код в свой проект, который предоставляет типы, на которые опирается компилятор.

Подробности здесь

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

Ответ 5

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

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

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