试图更好地理解异步线程。
C# 应用程序包含以下代码:
IAsyncResult myResult = cmd.BeginExecuteNonQuery(); //start
while (!myResult.IsCompleted)
{
myResult.AsyncWaitHandle.WaitOne(65000);
}
cmd.EndExecuteNonQuery(myResult); //end
我的理解是程序会等到 myResult 返回 true (IsComplete)。
当 myResult 永远不会返回 true(即 cmd 永远运行)时,aSync 是否超时?还是会继续运行?如何阻止它永远运行?
最佳答案
防止它永远运行的最佳方法是指定您管理的超时限制。
例如:
DateTime dtStart = DateTime.Now;
const int TIMEOUT_SECONDS = 120;
while (!myResult.IsCompleted)
{
if (DateTime.Now.Subtract(dtStart).TotalSeconds > TIMEOUT_SECONDS)
{
// Cleanup and bail
}
myResult.AsyncWaitHandle.WaitOne(65000);
}
关于c# - 停止异步进程永远运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8407163/