繁体   English   中英

如何保持线程运行并在函数完成时不终止

[英]How to keep a thread running and not terminate when a function finishes

我有这个线程,我不希望它在完成功能后自行终止。 相反,我想在此后给它另一个功能。 `

t1 = new Thread(() => test());
t1.Start(); 
if(t1 finished the task )
{
   give t1 new task for exmp test2  
}

您可以像这样在线程委托中调用两个函数

t1 = new Thread(() =>{ test();test2();});

如果要重复执行测试代码,则可以在Test()使用循环。 如果要在任何间隔后重复执行某些操作,也可以使用Timer

如果要使用已创建的线程来节省线程创建成本,则可以使用ThreadPool

线程池

许多应用程序创建的线程在休眠状态下花费大量时间,等待事件发生。 其他线程可能会进入睡眠状态,而只是被定期唤醒以轮询更改或更新状态信息。 通过为应用程序提供由系统MSDN管理的工作线程池,线程池使您可以更有效地使用线程。

如果使用的是.Net 4或更高版本,则可以使用Task而不是线程,然后可以使用Task.ContinueWith()实现此功能。

这是一个例子:

using System;
using System.Threading;
using System.Threading.Tasks;

namespace ConsoleApplication2
{
    static class Program
    {
        private static void Main()
        {
            var task = Task.Run(() => task1());
            task = task.ContinueWith(antecedant => task2());

            Console.WriteLine("Waiting for composite task to complete.");
            task.Wait();
            Console.WriteLine("Composite Task completed.");
        }

        private static void task1()
        {
            Console.WriteLine("Starting task 1");
            Thread.Sleep(2000);
            Console.WriteLine("Ending task 1");
        }

        private static void task2()
        {
            Console.WriteLine("Starting task 2");
            Thread.Sleep(2000);
            Console.WriteLine("Ending task 2");
        }
    }
}

如果使用此方法,则无需等待第一个任务完成就可以将其分配给另一个任务。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM