В настоящее время я работаю над заменой старого соединения клиент / сервер WCF на gRp c и решил использовать protobuf- net .Grp c, поскольку мы широко использовали protobuf- net в других местах в наша кодовая база. Однако у меня возникли некоторые проблемы с одной конкретной частью.
Часть оригинальной службы - это метод Subscribe, который использует IClientCallback для эффективной отправки события клиенту. Глядя на обычную gRp c, кажется, что это было бы возможно (хотя и немного странно) с использованием метода потоковой передачи на сервере и сохранения объекта IServerStreamWriter на сервере и записи в него всякий раз, когда мы хотели «запустить событие».
Однако я не могу понять, как сделать нечто подобное в protobuf- net .Grp c с возвращаемым типом IAsyncEnumerable. Самое близкое, что я могу понять, - это использовать Task.Wait в al oop и обновлять некоторую общую коллекцию, когда я хочу «запустить» событие, которое l oop затем проверит и выдаст возврат. Однако это не похоже на то, что оно будет хорошо масштабироваться, и на самом деле не существует отличного способа отменить подписку, когда клиент больше не слушает события.
Есть ли другой / лучший способ сделать это?