创建控制台程序
using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
namespace AsyncThread
{
public class Program
{
static void Main(string[] args)
{
Func<int> func1 = () => ThreadTest1();
var begin = func1.BeginInvoke(null, null);
int result = func1.EndInvoke(begin); // 等待线程结束方法1
Console.WriteLine($"ThreadTest1子线程结束,result={result}");
//--------------------------------------------------------
TaskFactory fanctory = new TaskFactory();
List<Task> taskList = new List<Task>();
taskList.Add(fanctory.StartNew(() =>
{
for (int i = 0; i < 10; i++)
{
Thread.Sleep(100);
Console.WriteLine($"fanctory任务{i}");
}
}));
Task.WaitAll(taskList.ToArray()); // 等待线程结束方法2
//--------------------------------------------------------
for (int i = 0; i < 5; i++)
{
int k = i;
Console.WriteLine($"【2】--------主线程{k}启动-----------");
taskList.Add(fanctory.StartNew(() =>
{
for (int j = 0; j < 5; j++)
{
Console.WriteLine($"【2】.子线程{k}-{j}启动");
}
}));
Task.WaitAll(taskList.ToArray()); // 等待该主线程里的所有子线程都结束再进入下一个主线程
}
//--------------------------------------------------------
for (int j = 0; j < 10; j++)
{
int k = j;
Task.Run(() =>
{
int res = ThreadTest1();
Console.WriteLine($"《3》.子线程{k}启动,结果={res}");
return res;
});
Task.WaitAll(); // 确保for循环按顺序执行
}
//--------------------------Thread--------------------------------
for (int i = 1; i < 5; i++)
{
Console.WriteLine("----------Thread主线程 " + i + " 开始------------");
Thread thread1 = new Thread(()=> { DosomeThing();}); // 调无参方法
//Thread thread2 = new Thread(new ThreadStart(DosomeThing)); // 调无参方法
Thread thread3 = new Thread(new ParameterizedThreadStart(DosomeThing)); // 带参数
thread1.Start();
//thread2.Start();
thread3.Start(i);
Thread.Sleep(1000);
}
//-------------------------------线程池---------------------------------------//
ThreadPool.QueueUserWorkItem(DosomeThing, "********线程池测试参数***********");
Console.WriteLine($"ThreadTest1主线程结束");
Console.ReadKey();
}
/// <summary>
///
/// </summary>
/// <returns></returns>
private static int ThreadTest1()
{
int result = 0;
for (int i = 0; i < 1000000; i++)
{
result += i;
}
return result;
}
/// <summary>
///
/// </summary>
public static void DosomeThing()
{
for (int i = 1; i < 5; i++)
{
//Thread.Sleep(1000);
Console.WriteLine("这是不带参数的子线程:" + i);
}
}
/// <summary>
///
/// </summary>
/// <param name="paramer"></param>
public static void DosomeThing(object paramer)
{
for (int i = 1; i < 4; i++)
{
//Thread.Sleep(1000);
Console.WriteLine("这是带参数子线程 " + i + " 的参数 " + paramer);
}
}
}
}
运行结果图