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