Permalink
Browse files

Update coroutines.md

  • Loading branch information...
Temon137 committed Jun 20, 2017
1 parent 9cf8951 commit 4b5416dd3121f00248c8e861529b18605b2e7a8b
Showing with 1 addition and 1 deletion.
  1. +1 −1 coroutines.md
View
@@ -105,7 +105,7 @@ To achieve this, the [`@RestrictsSuspension`](/api/latest/jvm/stdlib/kotlin.coro
This is relevant in the _rare_ cases when every suspension is handled in a special way in the library. For example, when implementing generators through the [`buildSequence()`](/api/latest/jvm/stdlib/kotlin.coroutines.experimental/build-sequence.html) function described [below](#generators-api-in-kotlincoroutines), we need to make sure that any suspending call in the coroutine ends up calling either `yield()` or `yieldAll()` and not any other function. This is why [`SequenceBuilder`](/api/latest/jvm/stdlib/kotlin.coroutines.experimental/-sequence-builder/index.html) is annotated with `@RestrictsSuspension`: -->
Расширяющие функции (и анонимные функции) также могут быть маркированы как `suspend`, подобно и всем остальным (регулярным) функциям. Это позволяет создавать [DSL](type-safe-builders.html) и другие API, которые пользователь может расширять. В некоторых случаях автору библиотеки необходимо запретить пользователю добавлять *новые пути* приостановки сопрограммы.
Расширяющие функции (и анонимные функции) также могут быть маркированы как `suspend`, подобно и всем остальным (регулярным) функциям. Это позволяет создавать [DSL](https://ru.wikipedia.org/wiki/Предметно-ориентированный_язык) и другие API, которые пользователь может расширять. В некоторых случаях автору библиотеки необходимо запретить пользователю добавлять *новые пути* приостановки сопрограммы.
Чтобы осуществить это, можно использовать аннотацию [`@RestrictsSuspension`](/api/latest/jvm/stdlib/kotlin.coroutines.experimental/-restricts-suspension/index.html). Когда целевой класс или интерфейс `R` аннотируется подобным образом, все расширения приостановки должны делегироваться либо из членов `R`, либо из других его расширений. Поскольку расширения не могут делегировать друг друга до бесконечности (иначе программа никогда не завершится), гарантируется, что все приостановки пройдут посредством вызова члена `R`, так что автор библиотеки может полностью их контролировать.

0 comments on commit 4b5416d

Please sign in to comment.