微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

原文地址:https://www.jb51.cc/csharp/239009.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐