如何判断进程挂起是否由于填充缓冲区(TCP,stdin,stdout)?

问题描述:

我有一个C#应用程序在独立的进程中启动一个控制台应用程序。这两个应用程序通过TCP连接进行通信,以及一些(有限的)标准输入/输出。我遇到的问题是,无论何时在调试器中“断开”,它似乎都会导致控制台应用程序挂起。如果我单独留下应用程序,两者都可以正常工作,并且在它们之间的交互中似乎没有问题。如何判断进程挂起是否由于填充缓冲区(TCP,stdin,stdout)?

到目前为止,我的研究似乎表明,由于输出缓冲区被填充,我可能会遇到死锁条件。我怎么能证实这确实是这种情况?是否有其他解释会导致这个问题?

如果您怀疑某个呼叫在某处被阻塞,您可以尝试查看是否有异步版本(带回调);或者以其他方式手动在线程内启动它,然后让主线程在循环中休眠,直到出现一些超时;并抛出一个异常,如果它没有完成,那么。

+0

在我可以(很容易)这样做的情况下进行异步似乎已经解决了问题。 – TreDubZedd 2010-05-06 23:22:31