Task<T> 和 Task 在 Func 委托中的作用

4

我希望清理一些代码。我有一个重载的方法。我能不能简化这段代码并在另一个方法中调用一个方法?我不知道怎么做。

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/上会更好? - Samvel Petrosov
好的,我会这样做。 - TjDillashaw
你做了吗?如果是这样,那么这个线程已经过时了。 - Jannik
1
@SamvelPetrosov 仅供记录,我认为这是一个完全有效的语法/代码问题,而不是主观的评论。 - Marc Gravell
@MarcGravell 我认为这个问题更多是关于代码审查,因为他已经有可用的代码,没有任何问题,只是想以其他方式完成它。 - Samvel Petrosov
我每次发布问题都需要延迟40分钟,所以我需要稍后再进行。 - TjDillashaw
1个回答

8

怎么样:

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

在@Marc指导下,我认为将return Task.CompletedTask;改为return Task.CompletedTask;会更好看。 - TjDillashaw
@JustBeginner 但是...这需要你有DecorateWithWaitScreen<Task>吗?嗯,我想那还好,但似乎...有点奇怪。 - Marc Gravell

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接