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

时间:2018-02-20 13:31:08

标签: c# exception-handling async-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;                
    });

}

1 个答案:

答案 0 :(得分:0)

它正在发布,但由于这是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";                
}