我一直在學習如何使用TPL,並通過article收集了一個示例。我複製並粘貼代碼完全一樣的Task.Run例子,但得到一個錯誤信息,說異常沒有被處理:Try/Catch Wrap Around Task.Run無法處理異常
private async void button1_Click(object sender, EventArgs e)
{
try
{
await Task.Run(() =>
{
Thread.Sleep(1000);
throw new InvalidOperationException("Hi!");
});
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
下面是錯誤的圖片:
這個代碼示例是過時的還是我錯過了什麼?
我認爲你需要使用'invoke()',但我不確定 –
如果你不是在調試器中運行這段代碼,我懷疑你會發現消息框顯示 - 你試過了嗎?該異常不是由正在運行任務的線程中的代碼處理的,而是您單獨捕捉到的......我懷疑調試器在這裏有點誤導。 –
@JonSkeet你是對的。當不使用調試器時它工作正常 – Seapoe