c# В любом случае, чтобы увеличить время ожидания на WaitOne? - PullRequest
0 голосов
/ 30 января 2020

Мое приложение должно обрабатывать список объектов. Чтобы получить список объектов, я должен подписаться на услугу поставщика данных, предоставляемую другим приложением, и отправить ему список идентификаторов объектов, на которые я тоже хочу подписаться. Я не могу контролировать, как работает этот поставщик данных.

Некоторые идентификаторы могут содержать данные, другие - нет. Если идентификаторы не имеют данных, связанных с ним, сервер не будет ничего делать. Если данные не приходят через определенное время, я хочу продолжить.

Данные поступают последовательно с некоторым интервалом между ними (сервер отправляет данные один за другим), а не в виде одного куска. Каждый раз, когда данные поступают, они запускают событие, которое их обрабатывает.

У меня есть WaitOne, который блокирует, пока я не получу все идентификаторы, которые я тоже подписал. В обычных случаях я получаю все идентификаторы и двигаюсь дальше. Некоторые идентификаторы могут не иметь никаких данных, и в этом случае сервер никогда не отправит ничего относительно этого идентификатора. Вот почему мне нужен тайм-аут на WaitOne. Если у некоторых идентификаторов нет данных, тайм-аут гарантирует, что я все равно продолжу.

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

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

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

В идеале я хочу иметь возможность добавлять некоторое время к таймауту (обычное время, необходимое для обработки одного объекта данных, что составляет 100 мс консервативно) каждый раз, когда поступают данные.

Есть ли способ достичь этого? Возможно, использование WaitOne - неправильный метод.

...