C# 使用 await 处理任务中的异常

C# Handling Exception in Task with await

我不熟悉 C# 中的 asyncawait 关键字,我使用的是 C# 6.0。我的代码有什么问题? DivideByZeroException 不会在 catch 块中被捕获。我读到在 C# 5 和更新版本中,可以使用 await 关键字和 try-catch 块包围的关键字轻松处理异常。

private async void button1_Click(object sender, EventArgs e)
{
    try
    {
        Console.WriteLine("in try");                
        int result = await f(0);
        textBox1.Text = result.ToString();
    }
    catch (Exception)
    {
        Console.WriteLine("in catch");                
    }
    finally
    {
        Console.WriteLine("in finally");                
    }
}

Task<int> f(int x)
{
    return Task<int>.Factory.StartNew(() =>
    {
        return 10 / x;                
    });

}

它正在发布中,但由于这是 WebForms/WPFWinForms 应用程序,它没有控制台,所以 Console.WriteLine 从不打印任何内容.替换:

Console.WriteLine("in catch");

textBox1.Text = "in catch";

这会起作用:

try
{
    textBox1.Text += "in try";               
    int result = await f(0);
    textBox1.Text = result.ToString();
}
catch (Exception)
{
    textBox1.Text += "in catch";                
}
finally
{
    textBox1.Text += "in finally";                
}