在C#中,synchronized
关键字并不存在。你可能是想要提到 lock
语句,它用于同步代码块以确保在同一时间只有一个线程可以访问共享资源。
在C#中,使用 lock
语句时,如果在锁定的代码块中发生异常,那么该异常将会被抛出,而不会被 lock
语句捕获。为了处理这种情况,你需要在锁定的代码块内部使用 try-catch
语句来捕获和处理异常。
下面是一个示例:
class Program
{
private static readonly object _lockObject = new object();
static void Main(string[] args)
{
Task task1 = Task.Run(() => Work());
Task task2 = Task.Run(() => Work());
Task.WaitAll(task1, task2);
}
static void Work()
{
lock (_lockObject)
{
try
{
// 在这里访问共享资源
Console.WriteLine($"Task {Task.CurrentId} is working.");
}
catch (Exception ex)
{
// 处理异常
Console.WriteLine($"Task {Task.CurrentId} encountered an exception: {ex.Message}");
}
}
}
}
在这个示例中,我们使用 lock
语句来确保在同一时间只有一个任务可以访问共享资源(在这里是控制台)。我们还使用 try-catch
语句来捕获和处理可能发生的异常。