Как отменить синхронный запрос на извлечение с помощью клиентской библиотеки C # с помощью SubscriberServiceApiClient.Pull ()? - PullRequest
0 голосов
/ 30 ноября 2018

Я хочу выполнить синхронную операцию извлечения подписки и хочу подождать, пока не будет доступно хотя бы одно сообщение.Я использую этот код:

SubscriberServiceApiClient client = SubscriberServiceApiClient.Create();
SubscriptionName subscriptionName = new SubscriptionName(projectId, subscriptionId);
PullResponse pullResponse = client.Pull(subscriptionName, returnImmediately: false, maxMessages: 10);

Согласно документации API , когда returnImmediately установлено на false , клиент может отменить запрос,Из этой документации:

Если для этого поля установлено значение true, система немедленно ответит, даже если в ответе на извлечение нет доступных сообщений для возврата.В противном случае система может подождать (в течение ограниченного периода времени), пока не будет доступно хотя бы одно сообщение, а не возвращать никаких сообщений.Клиент может отменить запрос, если он не хочет больше ждать ответа.

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

Когдав подписке нет доступных сообщений, этот вызов просто блокируется, пока через 10 минут я не получу исключение RpcException, которое является истечением RPC по умолчанию:

Grpc.Core.RpcException: Status(StatusCode=DeadlineExceeded, Detail="Deadline Exceeded")

Аналогичный вопрос был задан здесь , ноответ был для клиента Java на старой версии API.Я использую последнюю версию GA (Google.Cloud.PubSub.V1) клиента .NET.

...