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

В настоящее время я начинаю создавать приложение, которое принесет много пользы от асинхронного ожидания C # 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)

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

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

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

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

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

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

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

Microsoft выпустила пакет асинхронного таргетинга (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. Время выполнения можно скачать здесь .

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

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

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

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

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

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

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

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

Можно использовать VS 12 beta для целевой .NET 4.0 с использованием async / await.

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

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

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

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

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

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

  • Как заставить сценарий ждать / спать простым способом в единстве
  • Задержки времени в VBA
  • Как можно вызвать методы wait () и notify () в объектах, которые не являются нитями?
  • Прекращение простоя соединений mysql
  • Java Подождите, пока stream завершится
  • Как сделать задержку в Java?
  • Почему «SwitchTo» был удален из Async CTP / Release?
  • Ожидание нескольких SwingWorkers
  • ждут работы, но вызов task.Result зависает / deadlocks
  • Async Task.WhenAll с таймаутом
  • Как ограничить количество одновременных операций асинхронного ввода-вывода?
  • Давайте будем гением компьютера.