.net让线程支持超时的方法实例和线程在执行结束后销毁的方法
.net让线程支持超时
使用 cancellationtokensource
private static void timeouttest1()
{
var cts = new cancellationtokensource();
var thread = new thread(() =>
{
console.writeline(string.format("线程{0}执行中", thread.currentthread.managedthreadid));
thread.sleep(10000);
console.writeline(string.format("线程{0}执行中", thread.currentthread.managedthreadid));
});
cts.token.register(() =>
{
thread.abort();
});
cts.cancelafter(1000);
thread.start();
thread.join();
console.writeline(string.format("线程{0}的状态:{1}", thread.managedthreadid, thread.threadstate));
}
这里采用了 abort 终止了线程,cancellationtokensource 也支持其它模式,可以去官方看看文档。
使用 join
private static void timeouttest2()
{
var thread = new thread(() =>
{
console.writeline(string.format("线程{0}执行中", thread.currentthread.managedthreadid));
thread.sleep(10000);
console.writeline(string.format("线程{0}执行中", thread.currentthread.managedthreadid));
});
thread.start();
thread.join(1000);
thread.abort();
console.writeline(string.format("线程{0}的状态:{1}", thread.managedthreadid, thread.threadstate));
}
.net让线程在执行结束后销毁
线程执行完、遇到未处理异常和被终止后就自动不可用了,如果是垃圾,自然会被 gc 给回收,有一点需要说明的是:线程的未处理异常会导致应用程序的终止,一个线程的异常不会自动冒泡到其它线程。