带参数的泛型Func

Gab*_*Gab 2 c# func task-parallel-library

我有很多方法需要从外部API获取数据并以相同的方式管理错误.

所以我想避免在所有方法中使用相同的代码......

我试图使用Func,我有这个代码工作的方法没有参数.

方法 :

private async Task<T> ExecuteAction<T>(Func<Task<T>> action) where T : class
    {
        var securityException = false;
        object response = null;

        try
        {
            response = await action();
        }
        catch (MySecurityException)
        {
            securityException = true;
        }

        if (securityException)
        {
            // new login
            response = await action();
        }

        else if (// other condition)
        {
            //Do something
        }

        return (T) response;
    }
Run Code Online (Sandbox Code Playgroud)

方法调用:

Func<Task<string>> action = myApiClient.Action;

var test = await ExecuteAction<string>(action);
Run Code Online (Sandbox Code Playgroud)

我怎么能用参数做同样的事情?就像是 :

Func<Task<string>> action = myApiClient.Action(parameter1, parameter2);
Run Code Online (Sandbox Code Playgroud)

有没有一种简单的方法来修改我的方法来添加参数?

zmb*_*mbq 7

只需使用lambda表达式:

Func<Task<string>> action = ()=> myApiClient.Action(parameter1, parameter2)  
Run Code Online (Sandbox Code Playgroud)

并将其传递给您已有的方法.

  • 为什么道歉?如果您不问,您将如何学习? (2认同)