Вы можете попытаться сохранить список TIdTCPServer.Contexts заблокированным во время отправки данных, так как Контекст не освобождается до тех пор, пока он не будет удален из списка. Недостатком является то, что ни один клиент, который подключается / отключается / отправляется, не будет обрабатываться во время выполнения одной отправки.
В качестве альтернативы просто оберните отправляющий код в блок try / кроме и игнорируйте любые ошибки, которые могут возникнуть.
В качестве альтернативы, если вы можете переписать свой код, чтобы переместить очередь отправки в сам контекст, это было бы лучше, да. Тогда ваш обработчик события OnExecute может периодически проверять очередь и отправлять данные, когда они доступны. Это также поможет повысить производительность, поскольку вы больше не сериализуете свои посылки, если у вас есть исходящие данные, готовые для нескольких клиентов одновременно.