这是最原始的分身术。创建一个线程,就是召唤一个分身去干活。
using System.Threading;
void DoWork()
{
for (int i = 0; i < 5; i++)
{
Console.WriteLine("分身在干活..." + i);
Thread.Sleep(1000); // 休息1秒
}
}
// Main:
Thread t = new Thread(DoWork);
t.Start(); // 分身出发!
Console.WriteLine("本体在喝酒..."); // 主线程继续执行,不等待分身
现在更流行用 Task。它更智能,会自动利用线程池(ThreadPool)。
using System.Threading.Tasks;
Task.Run(() =>
{
Console.WriteLine("雇佣兵在干活...");
});
这是 C# 的终极奥义!让异步代码写起来像同步代码一样简单。
// 定义一个异步招式
async Task DownloadSecretAsync()
{
await Task.Delay(3000); // 模拟耗时操作(如飞鸽传书需要时间)
return "葵花宝典";
}
// 调用它
Console.WriteLine("开始接收秘籍...");
string book = await DownloadSecretAsync(); // 在这里等待,但不阻塞主线程(你可以去干别的)
Console.WriteLine("收到:" + book);
lock(锁)把包子锁起来,一次只让一个人抢。
使用 Task 开启两个任务。
任务一:每隔 0.5 秒输出 "左手画圆"。
任务二:每隔 0.5 秒输出 "右手画方"。
让它们同时运行 3 秒钟。
Task t1 = Task.Run(async () =>
{
for(int i=0; i<6; i++) { Console.WriteLine("左手画圆"); await Task.Delay(500); }
});
Task t2 = Task.Run(async () =>
{
for(int i=0; i<6; i++) { Console.WriteLine("右手画方"); await Task.Delay(500); }
});
await Task.WhenAll(t1, t2); // 等待两人都画完
Console.WriteLine("收功!");