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

C# 如何在函数完成时保持线程运行而不终止,c#,asp.net,multithreading,C#,Asp.net,Multithreading,我有一个线程,当它完成一个函数时,我不希望它自己终止它。相反,我想给它另一个函数。 ` 您可以在线程委托中调用这两个函数,如 t1 = new Thread(() =>{ test();test2();}); 如果要重复执行测试代码,则可以在test()中使用循环。如果要在任何间隔后重复执行某些操作,也可以使用 如果要使用已创建的线程来节省线程创建成本,则可以使用ThreadPool 许多应用程序创建的线程花费大量时间在 等待事件发生的休眠状态。其他线程可能会 进入睡眠状态后,只会被周

我有一个线程,当它完成一个函数时,我不希望它自己终止它。相反,我想给它另一个函数。 `


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

t1 = new Thread(() =>{ test();test2();});
如果要重复执行测试代码,则可以在
test()
中使用循环。如果要在任何间隔后重复执行某些操作,也可以使用

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

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


如果您使用的是.Net 4或更高版本,则可以使用
任务
而不是线程,然后可以使用来实现此功能

下面是一个例子:

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

如果使用这种方法,您不需要等待第一个任务完成后再分配另一个任务。

您的问题是什么?
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");
        }
    }
}