欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

.net让线程支持超时的方法实例和线程在执行结束后销毁的方法

程序员文章站 2024-02-26 22:10:40
.net让线程支持超时 使用 cancellationtokensource复制代码 代码如下:private static void timeouttest1()&nb...


.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 给回收,有一点需要说明的是:线程的未处理异常会导致应用程序的终止,一个线程的异常不会自动冒泡到其它线程。