C# 使用 await 处理任务中的异常
C# Handling Exception in Task with await
我不熟悉 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;
});
}
它正在发布中,但由于这是 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";
}
我不熟悉 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;
});
}
它正在发布中,但由于这是 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";
}