2017-07-14 108 views
2

嘿傢伙我想清理我的一些代碼。我有重載的方法。我能不能簡單地使用這段代碼並在另一個方法中調用一個方法?不能弄清楚如何做到這一點。任務<T>和任務在Func委託

private async Task<T> DecorateWithWaitScreen<T>(Func<Task<T>> action) 
{ 
    SplashScreenManager.ShowForm(this, typeof(WaitForm), true, true, false); 
    try 
    { 
     return await action(); 

    } 
    catch (Exception e) 
    { 
     MessageBox.Show(e.Message); 
     throw; 
    } 
    finally 
    { 
     SplashScreenManager.CloseForm(false); 
    } 
} 

private async Task DecorateWithWaitScreen(Func<Task> action) 
{ 
    SplashScreenManager.ShowForm(this, typeof(WaitForm), true, true, false); 
    try 
    { 
     await action(); 
    } 
    catch (Exception e) 
    { 
     MessageBox.Show(e.Message); 
     throw; 
    } 
    finally 
    { 
     SplashScreenManager.CloseForm(false); 
    } 
} 
+2

可能會更好張貼這樣的https://codereview.stackexchange.com/? –

+0

好的,我會這樣做的。 – TjDillashaw

+0

你做到了嗎?如果是這樣,這個線程已經過時 – Jannik

回答

6

如何:

private Task DecorateWithWaitScreen(Func<Task> action) 
    => DecorateWithWaitScreen<int>(async() => { await action(); return 0; }); 
+0

看起來不錯,謝謝! – TjDillashaw

+0

@Marc引導我到這個解決方案後,我認爲'''返回Task.CompletedTask;'''看起來更好。 – TjDillashaw

+0

@JustBeginner但是...那需要你有'DecorateWithWaitScreen '?嗯,我想這沒問題,但似乎......很奇怪 –