C#多线程
class Program
{
static void Main(string[] args)
{
#region 创建工作线程
//创建工作线程
//Thread thread = new Thread(DoWork);
//thread.Name = "工作线程1";
//// 启动线程
//thread.Start();
//thread.Join();
////创建工作线程2
//Thread thread2 = new Thread(DoWork2);
//thread2.Start();
//thread.Join();
////主线程继续执行
//for (int i = 0; i < 5; i++)
//{
// Console.WriteLine("主线程Worker Thread" + i);
// Thread.Sleep(2000);
//}
//Console.ReadLine();
#endregion
//string threadName = Thread.CurrentThread.Name;
#region 前后台线程
//演示前台、后台线程
BackGroundTest background = new BackGroundTest(10);
//创建前台线程
Thread fThread = new Thread(new ThreadStart(background.RunLoop));
//给线程命名
fThread.IsBackground = false;
fThread.Name = "前台线程";
BackGroundTest background1 = new BackGroundTest(20);
//创建后台线程
Thread bThread = new Thread(new ThreadStart(background1.RunLoop));
bThread.Name = "后台线程";
//设置为后台线程
bThread.IsBackground= true;
//启动线程
fThread.Start();
bThread.Start();
#endregion
#region new task
//Task task = new Task(() =>
//{
// Console.WriteLine($"Task 开启线程{Thread.CurrentThread.ManagedThreadId}处理业务");
// Thread.Sleep(2000);
//});
//task.Start();
#endregion
#region Task.Run(Action action)将任务放在线程池队列,返回并启动一个Task
//Task task1 = Task.Run(() =>
//{
// //Thread.CurrentThread.Name = "taskrun";
// Console.WriteLine($"Task 开启线程{Thread.CurrentThread.ManagedThreadId}处理业务{Thread.CurrentThread.Name}");
//});
//Task task = Task.Run(DoWork);
#endregion
#region task静态属性获取factory
//Task task = Task.Factory.StartNew(() =>
//{
// Console.WriteLine($"开启线程{Thread.CurrentThread.ManagedThreadId}处理任务");
// //Thread.Sleep(2000);
// Task.Delay(2000); // 等待 1 小时
//});
#endregion
#region TaskFactory 工厂实例化,二者概念不一样
//TaskFactory taskfactory1 = new TaskFactory();
//taskfactory1.StartNew(async () =>
//{
// Console.WriteLine($"{Thread.CurrentThread.ManagedThreadId}处理任务");
// await Task.Delay(2000);
//});
#endregion
#region task有返回值的创建方式
////1.new 实例化一个Task,需要通过Start方法启动
//Task<string> task = new Task<string>(() =>
//{
// return $"hello task1id为{Thread.CurrentThread.ManagedThreadId}";
//});
//task.Start();
////2.Task.Factory.StartNew(Func func)创建和启动一个Task
//Task<string> task2 = Task.Factory.StartNew<string>(()=> {
// return $"hello task2id为{Thread.CurrentThread.ManagedThreadId}";
//});
////3.Task.Run(Func func)将任务放在线程池队列,返回并启动一个Task
//Task<string> task3 = Task.Run<string>(()=> {
// return $"hello task3id为{Thread.CurrentThread.ManagedThreadId}";
//});
//Console.WriteLine("执行主线程"+Thread.CurrentThread.ManagedThreadId);
//Console.WriteLine(task.Result);
//Console.WriteLine(task2.Result);
//Console.WriteLine(task3.Result);
#endregion
#region 委托与lambda
//ContinueWithTest();
//ContinueWithTest1();
#endregion
#region task实例方法
//Console.WriteLine($"主线程{Thread.CurrentThread.ManagedThreadId}开启");
//var task1 = Task.Run(()=> {
// Console.WriteLine($"task1开启线程{Thread.CurrentThread.ManagedThreadId}");
// Thread.Sleep(10000);
//});
//task1.Wait();
//var task2 = Task.Run(()=> {
// Console.WriteLine($"task2开启线程{Thread.CurrentThread.ManagedThreadId}");
// Thread.Sleep(5000);
//});
//task2.Wait();
//var task3 = Task.Run(() => {
// Console.WriteLine($"task3开启线程{Thread.CurrentThread.ManagedThreadId}");
// Thread.Sleep(500);
//});
//task3.Wait();
//var task4 = Task.Run(() => {
// Console.WriteLine($"task4开启线程{Thread.CurrentThread.ManagedThreadId}");
// Thread.Sleep(2000);
//});
//task4.Wait();
//Console.WriteLine($"主线程{Thread.CurrentThread.ManagedThreadId}完成");
//Console.ReadKey();
#endregion
Console.ReadLine();
}
static void DoWork()
{
for (int i= 0;i < 5;i++)
{
Console.WriteLine("Worker Thread" +i);
Thread.Sleep(2000);
}
}
static void DoWork2()
{
for (int i = 0; i < 5; i++)
{
Console.WriteLine("Worker2 Thread" + i);
Thread.Sleep(1000);
}
}
private static void ContinueWithTest()
{
Console.WriteLine("Start");
Task<string> task1 = new Task<string>(()=> {
Console.WriteLine("task0");
return "task100";
});
Task<string> task2 = task1.ContinueWith(t =>
{
Console.WriteLine(t.Result);
return "task2";
});
task1.Start();
Console.WriteLine("end");
}
private static void ContinueWithTest1()
{
Console.WriteLine("Start");
Task<string> task1 = new Task<string>(DoTask1);
Task<string> task2 = task1.ContinueWith(DoTask2);
task1.Start();
Console.WriteLine("end");
}
private static string DoTask1()
{
Console.WriteLine("task0");
return "task100";
}
private static string DoTask2(Task<string> t)
{
Console.WriteLine(t.Result);
return "task200";
}
}
class BackGroundTest
{
private int Count;
public BackGroundTest(int count)
{
this.Count = count;
}
public void RunLoop()
{
//获取当前线程的名称
string threadName = Thread.CurrentThread.Name;
for (int i = 0; i < Count; i++)
{
Console.WriteLine("{0}计数:{1}", threadName, i.ToString());
//线程休眠500毫秒
Thread.Sleep(1000);
}
Console.WriteLine("{0}完成计数", threadName);
}
}

浙公网安备 33010602011771号