Добрый день!
Все проще, гораздо.
Net := THTTPClient.Create;
Net.BeginPost(
procedure (const Value : IAsyncResult)
begin
AsyncResult(Value); // Вот тут можно вызвать любую процедуру, или просто обработать результат.
end, URL, InputStream, OutputStream, Headers);
В анонимной процедуре просто вызываете нужную процедуру, для интерактивной одну, для периодических запросов другую.
DMS,
простейший пример (без обработки эксепшенов) отдельного класса на базе TThread:
В основном потоке создаешь нужное количество экземпляров (можно начать с одного), запускаешь, потом при необходимостии передаешь команду на выполнение/получаешь ответ выполненной команды. например так (простейший пример):
LThread := TAsyncHttp.Create;
LThread.Start;
LThread.Command := 'http://www.site.com/data?param=value';
while not LThread.IsReady do
Sleep(1);
Делаем отдельный поток, в нём пул http клиентов (array of). Ну и добавляем запрос через lock, успешный запрос обрабатываем через Synchronize.
Или делаем отдельный класс-наследник TThread, опять array of и запускаем в каждом экземпляре обращение к сайту в нужный момент. Возврат значения через callback или Synchronize. Только в этом случае надо не забывать удалять ресурсы завершившихся потоков в главном.
А меня System.JSON полностью устраивает. Ошибок парсинга валидных данных не было ни разу, скорость на нормальном уровне. Гигабайтные данные правда не парсирую, но мне это и не нужно