在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
語句來捕獲和處理可能發生的異常。