Я пишу оболочку .NET в C ++ lib для доступа к пользовательской БД. Библиотека использует обратные вызовы для возврата запрашиваемых данных.
void Query(Params p, Func callback);
Вызывает указанную функцию для каждой записи в возвращенном наборе данных.
Мне нужно написать такой интерфейс:
Record ReadOne();
Предполагается, что он блокируется, пока не получит одну запись, а затем вернется.
Насколько я понимаю, такой метод должен запускаться до тех пор, пока библиотека не перезвонит, затем заморозить это выполнение и переключить контекст для возврата одной записи. При следующем вызове ReadOne()
он должен переключиться назад и вернуться из обратного вызова.
Я мог видеть, что это сделано с дополнительным потоком. Мой вопрос: это можно сделать без дополнительной темы? Есть ли в CLR механизмы манипулирования контекстом? Может ли async / await служить этой цели?