3.更好的错误处理:异常会被安全处理,确保锁始终被释放。
using System; using System.Threading; using System.Threading.Tasks; class Program { // 定义一个共享锁对象 private static readonly Lock myLock = new Lock(); // 共享资源 private static int sharedResource = 0; // 堆代码 duidaima.com static async Task Main(string[] args) { // 模拟多个任务访问共享资源 var mytask1 = Task.Run(() => AccessSharedResource("任务 1")); var mytask2 = Task.Run(() => AccessSharedResource("任务 2")); // 等待两个任务完成 await Task.WhenAll(mytask1, mytask2); } static void AccessSharedResource(string taskName) { // 使用作用域锁同步访问 using (myLock.EnterScope()) { Console.WriteLine($"{taskName} 进入锁。"); // 安全地访问和修改共享资源 sharedResource++; Console.WriteLine($"{taskName} 将共享资源增至 {sharedResource}。"); // 模拟一些工作 Thread.Sleep(1000); Console.WriteLine($"{taskName} 离开锁。"); } } }工作原理
lock (lockObject) { // 关键区 }1.需要手动匹配 Monitor.Enter() 和 Monitor.Exit()。
lock (lockObject) { // 关键区 }1.自动释放锁。
2.代码更简洁,错误更少。
3.想要减少重复代码并使代码更易读。