如果未返回,则在间隔后终止一个线程

Mah*_*hdi 13 .net c# multithreading terminate intervals

我有一个线程从网络或串口抓取一些数据.如果在5秒内没有收到数据,则线程必须终止(或返回false).

换句话说,如果运行线程花费的时间超过5秒,则必须停止.

我用C#编写,但任何.NET语言都可以.

Ond*_*cny 8

有两种方法:

1.封装超时

从网络或串行端口读取数据的线程可以测量从启动时间开始经过的时间,并等待数据不超过剩余时间.网络通信API通常提供指定操作超时的方法.因此,通过简单的DateTime算法,您可以在工作线程中封装超时管理.

2.外部超时

使用另一个线程(或者如果可行的话,在主线程中执行)等待工作线程在特定时间限制内完成,如果没有,则中止它.像这样:

// start the worker thread
...

// give it no more than 5 seconds to execute
if (!workerThread.Join(new TimeSpan(0, 0, 5)))
{    
    workerThread.Abort();
}
Run Code Online (Sandbox Code Playgroud)

建议:我坚持使用第一个解决方案,因为它可以实现更清洁和可维护的设计.但是,在某些情况下,可能需要提供"硬"中止此类工作线程的方法.