在C#中,異步編程通常使用async
和await
關(guān)鍵字。當(dāng)在異步方法中發(fā)生異常時(shí),可以使用try-catch
語句進(jìn)行處理。下面是一個(gè)簡(jiǎn)單的示例,展示了如何在異步方法中處理異常:
using System;
using System.Threading.Tasks;
class Program
{
static async Task Main(string[] args)
{
try
{
await AsyncMethod();
}
catch (Exception ex)
{
Console.WriteLine($"捕獲到異常: {ex.Message}");
}
}
static async Task AsyncMethod()
{
await Task.Delay(1000);
throw new InvalidOperationException("這是一個(gè)異常");
}
}
在這個(gè)示例中,AsyncMethod
是一個(gè)異步方法,它使用await Task.Delay(1000)
模擬異步操作。然后,它拋出一個(gè)InvalidOperationException
異常。在Main
方法中,我們使用try-catch
語句捕獲這個(gè)異常,并在控制臺(tái)上輸出異常信息。
需要注意的是,當(dāng)在異步方法中使用await
關(guān)鍵字時(shí),異常會(huì)自動(dòng)從當(dāng)前任務(wù)中捕獲并封裝。這意味著你不需要顯式地捕獲異常,而是可以在調(diào)用異步方法的地方使用try-catch
語句捕獲封裝后的異常。例如:
using System;
using System.Threading.Tasks;
class Program
{
static void Main(string[] args)
{
try
{
AsyncMethod();
}
catch (Exception ex)
{
Console.WriteLine($"捕獲到異常: {ex.Message}");
}
}
static async Task AsyncMethod()
{
await Task.Delay(1000);
throw new InvalidOperationException("這是一個(gè)異常");
}
}
在這個(gè)示例中,我們直接在Main
方法中調(diào)用AsyncMethod
,而沒有使用await
關(guān)鍵字。在這種情況下,異常會(huì)自動(dòng)從AsyncMethod
任務(wù)中捕獲并封裝,然后我們可以使用try-catch
語句捕獲封裝后的異常。