【发布时间】:2013-11-12 20:28:57
【问题描述】:
当你启动线程时,有没有办法设置一个线程应该(最大)存活多长时间?
换一种说法,用“伪代码”,有没有这样的:
Thread t = new Thread();
t.start();
t.abort_after_x_seconds(30);
如果线程存活超过 30 秒,这将使线程中止。
编辑:我仍然无法让它工作,我最初拥有的是:
while(true)
{
if(...)
{
Thread t = new Thread(new ThreadStart(startMethod));
t.start();
}
Thread.sleep(...);
}
问题是有时线程会挂起(我没有实现线程的作用,所以我不知道确切原因(这是一个学校项目,我们在组织方面是菜鸟)),所以我想杀死那些线程。我尝试使用以下示例中的 Tasks 和 CancellationTokens,但是当 Task 挂起时 它无法检查是否发生了取消请求。
【问题讨论】:
-
中止线程不是一个好习惯(Thread.Abort() 已被弃用,并且在任何情况下都不起作用)...您为什么要这样做?必须有一个好的模式来代替那个。
-
您在线程内是否有一些长时间的操作?如果是这样,是否可以为该操作设置超时?
-
您尝试在哪个上下文中使用此功能?提供更多上下文。该线程将执行什么很重要。
标签: c# multithreading lifecycle