Dan*_*cco 0 .net c# multithreading garbage-collection
我有一个应用程序,对某人进行某种测试,持续约30分钟.在程序启动期间(第三方),我的代码被调用,我注册时间并将一些信息返回给应用程序,并将测试保存为"ONGOING".
大约30分钟后,我希望程序返回给我并将测试结果发给我,这样我就可以保存并完成整个过程.有时这种情况不会因各种原因而发生.所以我想在执行代码,以启动一个线程,睡了吧.大约35分钟(最长持续时间它可以),并且当它运行时只有一件事做:如果测试仍然是"正在进行",它更新它是"失败"或其他一些状态.
但是,我从读这里是C#的垃圾收集器能够收集它假定为不活动线程,我很担心这一点,所以我想请问如何做到这一点的KeepAlive方法适用于螺纹,或是否有任何可靠测试它的方法(因为即使我等了35分钟才发生它,可能会出现GC实际收集线程并且一切都失败的情况).
那么,这是什么工作的正确方法,或者如果不是这样,我该怎么做呢?
static void Main(string[] args)
{
//After all the startup functions are done...
Thread thread = new Thread( () => UpdateTest(1) );
thread.Start();
//My thread is supposedly safe...?
GC.KeepAlive(thread);
}
static void UpdateTest(int testID)
{
Thread.Sleep(210000); //Sleep for 35min
//Search the database for the testID, update it if it's still ONGOING.
}
Run Code Online (Sandbox Code Playgroud)
由于GC,线程不会中止.实际上,不可能可靠地中止线程.(试着中止try {} finally { while(true); }.)
你提到的答案是错误的.但是在这个问题上有3个正确的答案.你恰巧相信错误的,少数人的回答.
你有没有问题要解决.