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

前端之家收集整理的这篇文章主要介绍了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);

猜你在找的C#相关文章