我是C#中async
和await
个关键字的新手,我正在使用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;
});
}
答案 0 :(得分:0)
它正在发布,但由于这是WebForms
/ WPF
或WinForms
应用,因此它没有控制台,因此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";
}