2017-07-14 15 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がこの解決策を指導した後、私は '' return Task.CompletedTask; ''を見栄え良くすると思います。 – TjDillashaw

+0

@JustBeginner ...しかし、あなたは 'DecorateWithWaitScreen 'を持っている必要がありますか?メア、それはOKだと思うけど、そう思える...奇妙な –

関連する問題