Переключите контексты выполнения в CLR без дополнительных потоков, чтобы избавиться от обратных вызовов - PullRequest
0 голосов
/ 17 мая 2019

Я пишу оболочку .NET в C ++ lib для доступа к пользовательской БД. Библиотека использует обратные вызовы для возврата запрашиваемых данных.

void Query(Params p, Func callback);

Вызывает указанную функцию для каждой записи в возвращенном наборе данных.

Мне нужно написать такой интерфейс:

Record ReadOne();

Предполагается, что он блокируется, пока не получит одну запись, а затем вернется.

Насколько я понимаю, такой метод должен запускаться до тех пор, пока библиотека не перезвонит, затем заморозить это выполнение и переключить контекст для возврата одной записи. При следующем вызове ReadOne() он должен переключиться назад и вернуться из обратного вызова.

Я мог видеть, что это сделано с дополнительным потоком. Мой вопрос: это можно сделать без дополнительной темы? Есть ли в CLR механизмы манипулирования контекстом? Может ли async / await служить этой цели?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...