C#中的同步和异步《一》
以下理解借鉴博客:借鉴博客地址1
异步编程(Asynchronous)
允许任务在后台执行,而不会阻塞调用线程。C#使用async和await关键字
async Task AsynchronousMethod()
{
// 等待异步操作完成
await Task.Delay(1000); // 模拟耗时操作
Console.WriteLine("AsynchronousMethod 完成");
}
串行:
任务按照顺序一个接一个地执行,这在单线程程序中是自然的
// 同步串行
void Task1()
{
Console.WriteLine("Task 1 is running");
}
void Task2()
{
Console.WriteLine("Task 2 is running");
}
Task1();
Task2();
// 异步串行
async Task Task1Async()
{
Console.WriteLine("Task 1 is running");
await Task.Delay(1000); // 模拟异步操作
}
async Task Task2Async()
{
Console.WriteLine("Task 2 is running");
await Task.Delay(1000); // 模拟异步操作
}
async Task MainAsync()
{
await Task1Async();
await Task2Async();
}
MainAsync().GetAwaiter().GetResult(); // 运行异步方法
并行:(Parallel)
允许多个任务同时执行,通常利用多核处理器的能力。在C#中,Parallel.For、Parallel.ForEach和Parallel.Invoke等API用于并行执行。
using System.Threading.Tasks;
void Task1()
{
Console.WriteLine("Task 1 is running");
}
void Task2()
{
Console.WriteLine("Task 2 is running");
}
Parallel.Invoke(() => Task1(), () => Task2());
Parallel.For(0, 10, i =>
{
Console.WriteLine($"并行任务 {i} 开始");
Thread.Sleep(100); // 模拟耗时操作
Console.WriteLine($"并行任务 {i} 完成");
});
并发(Concurrency):
并发是并行和串行在更广泛意义上的结合。它指的是多个任务同时或几乎同时执行,但不一定在物理上并行
using System.Threading;
void Task1()
{
Console.WriteLine("Task 1 is running");
}
void Task2()
{
Console.WriteLine("Task 2 is running");
}
Thread t1 = new Thread(new ThreadStart(Task1));
Thread t2 = new Thread(new ThreadStart(Task2));
t1.Start();
t2.Start();
t1.Join();
t2.Join();
死锁(Deadlock)
当两个或多个线程相互等待对方释放资源时,就会发生死锁
避免死锁的策略:1.确保所有线程以相同的顺序获取资源。2.使用锁超时机制。3.避免嵌套锁。4.使用更高级的并发控制机制,如信号量、事件或Concurrent集合。
以下理解借鉴博客:借鉴博客2