Ио выдает исключение, когда сталкивается с тупиком.
ссылка: сообщение от, по-моему, Стив Декорте на lang.lightweight ,Сообщение вставлено ниже:
Io имеет продолжения в форме асинхронных сообщений и фьючерсов.Пример:
aFuture = obj @foo
// the @ means "perform message foo asynchronously"
// that is, in a light weight thread owned by obj
// The aFuture's value ivar is set with the result
result = aFuture value
// This causes the current light weight thread to pause
// until the aFuture's vale is set.
// So this is effectively a continuation.
// another option is:
obj @(foo) sendResultTo(target, "foobar")
// which is more like the callcc style
Интересной особенностью этого стиля использования является то, что никто, кажется, не находит его трудным для понимания.Кроме того, Io использует фьючерсы для автоматического обнаружения взаимоблокировок.Когда возникает тупик, он создает исключение, а не разрешает его.
Примечание.Вышеуказанный пост датируется 2003 годом, поэтому произошли некоторые изменения.Пожалуйста, смотрите последнюю онлайн Concurrency
документацию для получения последней информации.
Обновление - И из онлайн документации там написано:
Автоматическое обнаружение взаимоблокировок
Преимущество использования фьючерсов заключается в том, что, когда будущее требует ожидания, оно будет проверять, не приостановлено ли ожидание результатаможет привести к тупику и, если это так, избежать тупика и вызвать исключение.Он выполняет эту проверку, просматривая список подключенных фьючерсов.