Я хочу выполнить синхронную операцию извлечения подписки и хочу подождать, пока не будет доступно хотя бы одно сообщение.Я использую этот код:
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.