c# – 启动时设置线程生存期

有没有办法设置一个值,当你启动线程时线程应该(最大)存活多长时间?

用另一种方式说,用“伪代码”,有这样的东西:

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,如下例所示,但当任务挂起时
它无法检查是否发生了取消请求.

解决方法

>大多数情况下,您不应该使用Threads,而是使用Tasks.它们更方便,更有效.
>中止某些事情并不安全,您应该使用合作取消.如果您正在调用支持取消的方法,那么只需传递一个取消令牌,该令牌将在30秒后被取消.

所以你的代码看起来像这样(使用.Net 4.5):

var cts = new CancellationTokenSource(TimeSpan.FromSeconds(30)));
var task = Task.Run(() => YourMethod(cts.Token),cts.Token);

相关文章

在要实现单例模式的类当中添加如下代码:实例化的时候:frmC...
1、如果制作圆角窗体,窗体先继承DOTNETBAR的:public parti...
根据网上资料,自己很粗略的实现了一个winform搜索提示,但是...
近期在做DSOFramer这个控件,打算自己弄一个自定义控件来封装...
今天玩了一把WMI,查询了一下电脑的硬件信息,感觉很多代码都...
最近在研究WinWordControl这个控件,因为上级要求在系统里,...