带参数的泛型Func

时间:2014-08-25 19:49:08

标签: c# task-parallel-library func

我有很多方法需要从外部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;
    }

方法调用:

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

var test = await ExecuteAction<string>(action);

如何使用参数做同样的事情?类似的东西:

Func<Task<string>> action = myApiClient.Action(parameter1, parameter2);

是否有一种简单的方法可以修改我的方法来添加参数?

1 个答案:

答案 0 :(得分:7)

只需使用lambda表达式:

Func<Task<string>> action = ()=> myApiClient.Action(parameter1, parameter2)  

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