2
我想轉換應用程序使用任務而不是微軟的多線程框架,但我遇到了錯誤處理的麻煩。從微軟的文檔(http://msdn.microsoft.com/en-us/library/vstudio/0yd65esw.aspx),我希望在try-catch下面來捕獲異常:如何處理任務中的lambda表達式中的異常?
private async void Button1_Click()
{
try
{
object obj = await TaskFunctionAsync()
}
catch(Exception ex)
{}
}
public Task<object> TaskFunctionAsync()
{
return Task.Run<object>(() =>
{
throw new Exception("foo");
return new object();
});
}
但是當的button1_Click被激發,我得到的lambda表達式中未處理的異常。有什麼方法可以將異常排除在try-catch之外嗎?我認爲這種錯誤處理(因此你不需要從任務工作者線程編組)是Task框架的主要優點之一。
我也試過:
public async Task<object> TaskFunctionAsync()
{
return await Task.Run<object>(() =>
{
throw new Exception("foo");
return new object();
});
}
...你說得對。謝謝。 – anonWrkrB
有沒有辦法讓它不會拋出lambda表達式(但仍然在Button1_Click內),還是以某種方式更正確地處理它? – anonWrkrB
這是正確的方法。也許你的調試器被設置爲打破所有異常(這通常是件好事)。按下Ctrl-alt-E。 – usr