it-swarm.com.ru

ключевые слова async/await недоступны в .net 4.0

Я хотел бы использовать async/await в C # 4.0, и я установил следующий пакет:

http://www.nuget.org/packages/Microsoft.Bcl.Async/

Проблема в том, что у меня нет доступных ключевых слов async/await.

Я использую VS2010 с SP1.

Благодарю.

24
Álvaro García

Вы не получите лучший ответ, чем Джон Скит .

Единственный поддерживаемый способ сделать это - использовать VS2012 с Microsoft.Bcl.Async.

VS2010 очень сложно начать работать с asyncawait. Был старый пакет Async CTP (в котором было много ошибок, которые никогда не были исправлены), которые действовали как «дополнение»/«частичная замена» VS2010. Однако этот пакет никогда не работал хорошо с обновлениями VS2010. Итак, вам сначала нужно найти версию одного из старых инсталляторов CTP, поиграться с установкой обновлений some VS, а затем посмотреть, работает ли CTP. Если вы уже установили все свои обновления VS2010, то никакая версия CTP не будет работать. Я думаю как только вы обнаружите ситуацию обновления, где вы можете установить работающую CTP, затем вы можете установить другие обновления.

После всей этой работы вы по-прежнему получите ошибочную (и определенно неоптимизированную) реализацию async.

_/Или, вы можете сделать так, как предложил Джон Скит, и загрузить бесплатную версию VS2012 Express с помощью Microsoft.Bcl.Async и получить полностью поддерживаемое решение.

27
Stephen Cleary

Async/Await были введены с C# 5.0 и .NET Framework 4.5

больше информации здесь:

Асинхронное программирование с помощью Async и Await (C # и Visual Basic)

Асинхронное программирование в C # 5.0 с использованием асинхронности и ожидания

Если вы используете Framework 4, как и я на предприятии, вы можете использовать другие обходные пути . Вы можете использовать пакет NuGet, который позволяет вам использовать эти функции.

Использование async/await без .NET Framework 4.5

Просто установите его из диспетчера пакетов NuGet:

Установить-пакет Microsoft.Bcl.Async

Извлечено из Галерея NuGet :

Этот пакет позволяет проектам Visual Studio 2012 использовать новые ключевые слова async и await. Этот пакет также включает методы расширения на основе задач, которые позволяют использовать некоторые из существующих асинхронных API-интерфейсов с ключевыми словами нового языка. Проекты Windows Phone Silverlight 8 могут использовать этот пакет для получения доступа к асинхронным методам расширения для типов сетей.

19
Carlos Landeras

Я написал плагин .NET 4.5 с использованием async для приложения .NET 4.0, и, к моему удивлению, это действительно сработало!

Я думаю, что это сработало, потому что у меня установлен .NET 4.5, который заменил среду выполнения .NET 4 на обновленную, которая используется как для .NET 4.0, так и для .NET 4.5. Затем мой плагин был загружен с отражением, используя Assembly.Load(...) или подобное. Я пробовал оба async/await и Environment.CurrentManagedThreadId (свойство .NET 4.5), и оба работали.

Таким образом, если установка .NET 4.5 является опцией (т. Е. Не поддерживает Windows XP), можно использовать комбинацию, загрузив часть приложения .NET 4.5 с помощью рефлексии, что позволит вашей части 4.5 реализовать интерфейс 4.0. Однако, если вы пишете приложение самостоятельно, гораздо более простым решением было бы переключиться на .NET 4.5 для всего проекта.

0
johv