Я бы сказал, что связь между ними такова: async
-await
— это техника, которую используют языки программирования, чтобы вы могли писать код, который выглядит синхронно (например, без явных делегатов продолжения), но на самом деле выполняется асинхронно. Это достигается созданием объекта, представляющего текущее состояние выполнения функции, и его регистрацией как продолжение ожидаемой операции.
Короче говоря, async
-await
использует продолжения.
Является ли паттерн async
/await
ограниченным набором полномасштабных продолжений? (Если да, то как продолжения более выразительны?)
Ты мог сказать это. Продолжения — это более общая концепция, async
-await
просто использует их для достижения асинхронности.
Например, в стиле передачи продолжений вы можете реализовать обработку исключений, используя два продолжения. для каждой операции: один для случая успеха и один для случая отказа. Такое использование продолжений не имеет ничего общего с async
-await
(вам пришлось бы писать каждое продолжение явно, возможно, как лямбду).
Являются ли продолжения лишь одним из возможных способов реализации async
/await
? (Если это правда, какие другие подходы к реализации существуют?)
Я бы сказал, что концепция продолжения занимает центральное место в async
-await
.
Основная идея async
-await
состоит в том, чтобы остановить выполнение функции на данный момент и возобновить ее позже. И для этого вам нужен какой-то объект, который можно использовать для этого возобновления. Именно это и есть продолжение.
person
svick
schedule
03.04.2014