c# - 停止异步进程永远运行?

标签 c# multithreading .net-4.0 asynchronous

试图更好地理解异步线程。

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/

相关文章:

c# - 使用 LocalDB 进行集成测试

c# - 当游戏中的CPU使用率达到峰值时,为什么我的NAudio音乐会卡住?

c# - "pre-computed"map-reduce 索引(RavenDB/CouchDB)可以用于这种算法吗?

c# - 异步等待会丢失 http 上下文吗?

c# - CSharpCodeProvider "string"不包含 "Select"的定义。 CSCC 遇到 System.Linq 问题

c# - 需要一种不显眼的日志记录方法

java - 同步数据输出流

c - Tcl 和 C 线程之间的共享变量

python - 在多线程 Python 中使用队列,将队列作为引用传递给子函数

c# - 对可能未初始化的字典元素执行加等于操作的简洁方法