Все операции с портами в Rebol 3 являются асинхронными. Единственный способ найти синхронную связь - позвонить wait
.Избегайте рекурсии при чтении/записи порта синхронно?
Но проблема с вызовом wait в этом случае заключается в том, что он проверит события для всех открытых портов (даже если они не находятся в портовом блоке, прошедшем для ожидания). Затем они называют свои обработчики обработчиков событий, но чтение/запись может выполняться в одном из этих обработчиков событий. Это может привести к рекурсивным вызовам «wait».
Как мне обойти это?
На самом деле, я не думаю, что есть решение этого в текущей реализации R3, поэтому я пошел, чтобы добавить уточнение «/ only», чтобы «подождать», с которым он будет ждать только порты, предоставленные «wait» и, таким образом, избежать рекурсивных вызовов. Посмотрите мой запрос на тягу по адресу: https://github.com/rebol/rebol/pull/177 –
Из любопытства, зачем вам это нужно синхронно? – toadzky
Существует много ситуаций, когда кодирование с синхронным портом намного проще: предположите, что вы хотите отправить электронное письмо одним нажатием кнопки и сообщить, успешно ли оно или не удается. Гораздо легче дождаться, когда это закончится, прежде чем делать что-либо еще. –