Как я могу узнать, происходит ли зависание процесса из-за заполненных буферов (TCP, stdin, stdout)? - PullRequest
0 голосов
/ 07 мая 2010

У меня есть приложение C #, которое запускает консольное приложение в отдельном процессе. Эти два приложения обмениваются данными через TCP-соединение, а также через некоторые (ограниченные) стандартные средства ввода / вывода. Проблема, с которой я сталкиваюсь, заключается в том, что всякий раз, когда я «ломаюсь» в отладчике, кажется, что консольное приложение зависает. Если я оставлю приложения в покое, оба будут работать нормально, и, похоже, проблем с взаимодействием между ними не будет.

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

1 Ответ

1 голос
/ 07 мая 2010

Если вы подозреваете, что вызов где-то блокируется, вы можете попытаться проверить, есть ли асинхронная версия (с обратным вызовом); или иначе, вручную запустите его внутри потока, а затем оставьте основной поток в цикле до некоторого времени ожидания; и выбросить исключение, если оно не завершится до тех пор.

...