Логика асинхронности принимает на вход анонимную процедуру для обработки результата, анонимная процедура захватывает переменные в зоне своего определения, а там хоть итем, хоть индекс, хоть блэкджек с простихоспаде чем попало...
Тут нет кода, выполняемого в доп.потоке.
Метод Synchronize делает следующее: "приостановить выполнение себя (т.е. доп.потока), переключиться в основной поток, выполнить там действие и после этого вернуться в себя (в доп.поток)".
Ввиду того, что в коде доп.потока есть только synchronize - то единственное, что поток делает - ждёт, пока выполнится его действие в основном потоке.
То есть - является абсолютно бессмысленным.
у формы есть событие FormVirtualKeyboardShown, где можно в общем обработать событие показа\скрытия клавиатуры.
там и флаг есть KeyboardVisible.
а в частности, для конкретного поля показывать\скрывать вот так можно как вариант:
procedure Tform1.Memo1Tap(Sender: TObject; const Point: TPointF);
var
KeyboardService: IFMXVirtualKeyboardService;
begin
if TPlatformServices.Current.SupportsPlatformService(IFMXVirtualKeyboardService, IInterface(KeyboardService)) then // Запрашиваем сервис виртуальной клавиатуры
KeyboardService.HideVirtualKeyboard;
//KeyboardService.ShowVirtualKeyboard(Memo1); для показа
end;