我有一個奇怪的問題,結合異步/ AWAIT,使其工作: 我創建了一個小程序,它應該基本上處理每一個動作的try/catch語句:異步/等待Lambda表達式
internal static void HandledAction(Action action, Info infoBar)
{
try
{
action();
}
catch (Exception ex)
{
infoBar.SetError("An Exception occured: " + ex.Message);
WriteLog(ex.StackTrace);
}
Nohing到幻想,但它是值得的,因爲改變錯誤處理是非常容易的。 但是,如果我希望在Lambda中獲得Data async,會發生什麼情況?讓我們這個簡單的例子:
private void mnuImportData_Click(object sender, RoutedEventArgs e)
{
ActionHelper.HandledAction(async() =>
{
throw new NotImplementedException("Ups");
}, infoMain);
}
肯定的是,HandledAction被調用,傳遞,因爲它得到的指針返回,異常得到投擲,當然沒有處理。
我想我必須創建一個AsyncHandledAction,並將操作設置爲異步,但有沒有更簡單的方法來解決這個問題?
我想很多人使用中央異常處理,並有更好的解決方案呢?
在此先感謝
馬蒂亞斯
編輯:我創建了一個例子,它應該shpw內特我需要:我基本上不想整個動作我通過是awaitable,但在lambda一個電話是:
ActionHelper.HandledActionAsync(() =>
{
//elided
CheckFileResult rslt = await excelImport.CheckFilesAsync(tmpPath);
//elided
}, infoMain);
當然,這樣做,我得到的錯誤:
錯誤3「等待」經營者只能異步拉姆達明示內使用離子。考慮用'async'修飾符標記這個lambda表達式。的行動代替Func鍵:
'async()=> {}'可以匹配'Action'和'Func'。如果它匹配前者,就好像有方法簽名'async void F()';後者,'異步任務F()'。在你的情況下,你正在得到'async void F()',它具有即燃即用語義。 –
2014-09-03 14:43:38