如果需要很长时间,如何停止在线程中执行代码.我有一些线程一直在工作,但在线程中的代码执行太长而应用程序停止响应之后.
是否有可能,如果代码没有在30s执行线程将停止执行它并转到下一个代码...所以应用程序仍然是活着的,不会停止响应.我正在使用C#.net 3.5
Chr*_*ich 23
我在这里的回答类似于我在这里发布的回答.
您可以通过在监视线程中等待工作线程达到指定的时间来执行此操作,然后强制终止工作线程(如果尚未完成).请参阅下面的示例代码.
但是,一般情况下,强制使用某个线程Thread.Abort并不是一个好主意,因为目标线程不一定处于已知状态,并且可能具有可能未被释放的资源的打开句柄.使用Thread.Abort是代码气味.
更简洁的方法是更改工作线程以管理自己的生命周期.工作线程可以检查它在众所周知的检查点执行了多长时间,然后在超出某个限制时停止.这种方法的缺点是需要在线程正在进行的实际工作中分散许多检查点.此外,通过在检查点之间进行过多计算,工作线程可能很容易超出限制.
class Program
{
static void Main(string[] args)
{
if (RunWithTimeout(LongRunningOperation, TimeSpan.FromMilliseconds(3000)))
{
Console.WriteLine("Worker thread finished.");
}
else
{
Console.WriteLine("Worker thread was aborted.");
}
}
static bool RunWithTimeout(ThreadStart threadStart, TimeSpan timeout)
{
Thread workerThread = new Thread(threadStart);
workerThread.Start();
bool finished = workerThread.Join(timeout);
if (!finished)
workerThread.Abort();
return finished;
}
static void LongRunningOperation()
{
Thread.Sleep(5000);
}
}
Run Code Online (Sandbox Code Playgroud)