加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 08:13:34 所属栏目:百科 来源:网络整理
导读:有没有办法设置一个值,当你启动线程时线程应该(最大)存活多长时间? 用另一种方式说,用“伪代码”,有这样的东西: Thread t = new Thread();t.start();t.abort_after_x_seconds(30); 如果它超过30秒,它会使线程中止. 编辑:我仍然无法让它工作,我原来的是:
有没有办法设置一个值,当你启动线程时线程应该(最大)存活多长时间?

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

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);

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读