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

哈米德·礼萨·阿尔扎吉

我是C# 中asyncandawait关键字的新手,我使用的是 C# 6.0。我的代码有什么问题?DivideByZeroException 不会在catch块中捕获我读到在 C# 5 和更新版本中,可以使用awaittry-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;                
    });

}
FCin

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章