Вот аналогия с потоками Java:
1) Проверка флага прерывания явно:
while (!Thread.interrupted()) {
// loop code
}
2) Вызов прерываемых операций:
while (true) {
Thread.sleep(1);
// loop code
}
В обоихв случаях, когда поток будет отвечать на поднятый флаг прерывания.
В сопрограммах delay()
является эквивалентом Thread.sleep()
, а флаг isActive
является аналогом флага Thread.interrupted
.
Поэтому, когда вы пишете
delay(1)
, сопрограмма будет запланирована вне потока, и, когда придет время ее возобновления, при вызове continuation.resume()
она сначала проверит флаг isActive
.Если он поднят, вместо него будет CancellationException
.