Это покрывает модель асинхронного программирования, поддерживаемую различными языками программирования, с помощью асинхронного, и ждите ключевых слов.

Несколько языков программирования поддерживают модель асинхронного программирования использование сопрограмм, с async и await ключевые слова.

Поддержка модели была добавлена к C# и VB в VS2012 и Python в 3,5. Предложение по функции в ECMAScript было принято в этап 1 для ECMAScript 7. Dart 1.9 также добавляет поддержку модели.

C# и Visual Studio

Асинхронное программирование с async и await был начат с C# 5.0 в Visual Studio 2012. Поддержка во время выполнения этого понятия языка является частью.NET 4.5 / Windows Phone 8 / Windows 8.x Store Runtime.

Также возможно использовать async/await и будьте нацелены на.NET 4.0 / Windows Phone 7.1 / Silverlight 4 / MonoTouch / MonoDroid / Портативные Библиотеки классов с Visual Studio 2012 + и Microsoft.Bcl.Async Пакет NuGet, который лицензируется для производственного кода.

Асинхронное дополнение CTP для VS2010 SP1 также доступно, но это не подходит для разработки продукта.

Python

Подобный синтаксис был представлен Python 3.5 (см. PEP 492 - Сопрограммы с асинхронным и ждите синтаксиса.

Ранее, было возможно записать сопрограммы с помощью генераторов; с введением await и async сопрограммы были сняты к функции родного языка.

Ecmascript

Введение Обещаний и Генераторов в ECMAScript представляет возможность существенно улучшить модель уровня языка для написания асинхронного кода в ECMAScript.

Подобное предложение было внесено с Задержанными Функциями во время обсуждений ES6. Предложение здесь поддерживает те же варианты использования, с помощью подобного или тот же синтаксис, но непосредственно полагаясь на генераторы и обещания вместо того, чтобы определить пользовательские механизмы.

Разработка этого предложения происходит в https://github.com/tc39/ecmascript-asyncawait. Файл выходит там. Нетривиальные вклады ограничены участниками TC39, но вытягивают запросы на незначительные проблемы, приветствуются и поощрены!

Состояние этого предложения

Это предложение было принято в этап 1 ("Предложение") процесса спецификации ECMAScript 7 в январе 2014 (обсуждение).

Примеры

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

function chainAnimationsPromise(elem, animations) { var ret = null; var p = currentPromise; for(var anim in animations) { p = p.then(function(val) { ret = val; return anim(elem); }) } return p.catch(function(e) { /* ignore and keep going */ }).then(function() { return ret; }); } 

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

Task.js и подобные библиотеки предлагают способ использовать генераторы для дальнейшего упрощения кода, поддерживающего то же значение:

function chainAnimationsGenerator(elem, animations) { return spawn(function*() { var ret = null; try { for(var anim of animations) { ret = yield anim(elem); } } catch(e) { /* ignore and keep going */ } return ret; }); } 

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

С асинхронными функциями весь остающийся шаблон удален, оставив только семантически значимый код в тексте программы:

async function chainAnimationsAsync(elem, animations) { var ret = null; try { for(var anim of animations) { ret = await anim(elem); } } catch(e) { /* ignore and keep going */ } return ret; } 

Это нравственно подобно генераторам, которые являются функциональной формой, которая производит Объект генератора. Эта новая асинхронная функциональная форма производит объект Обещания.

Мелочи

Asynchrony не принимает многопоточность, async или await ключевые слова волшебно не создают потоков.

Ресурсы:

C#

Ecmascript

Похожие страницы:

- Библиотека параллели задачи