为了账号安全,请及时绑定邮箱和手机立即绑定

C# :具有不同定义的方法的通用方法/包装器

C# :具有不同定义的方法的通用方法/包装器

C#
ITMISS 2022-08-20 15:25:43
例如,我有以下方法:    private async Task<T> Read<T>(string id, string endpoint)    {         //....    }    private async Task<List<T>> List<T>(int start, int count, string endpoint, List<FilterData> filterData = null)    {         //....    }(以及更多具有不同属性的内容)但是所有这些方法都可以抛出 如果我调用方法抛出这个异常,我想执行一些逻辑并调用调用的方法。即:BillComInvalidSessionException    private async Task<T> ReadWithRetry<T>(string id, string endpoint)    {        try        {            return await Read<T>(id, endpoint);        }        catch (BillComInvalidSessionException)        {            SessionId = new Lazy<string>(() => LoginAsync().Result);            return await ReadWithRetry<T>(id, endpoint);        }    }    private async Task<List<T>> ListWithRetry<T>(int start, int count, string endpoint, List<FilterData> filterData = null)    {        try        {            return await List<T>(start, count, endpoint, filterData);        }        catch (BillComInvalidSessionException)        {            SessionId = new Lazy<string>(() => LoginAsync().Result);            return await ListWithRetry<T>(start, count, endpoint, filterData);        }    }如何创建一个通用方法,它将执行相同的逻辑,但获得不同的方法作为参数?
查看完整描述

1 回答

?
暮色呼如

TA贡献1853条经验 获得超9个赞

您可以通过使用泛型委托来实现此目的:


private async Task<T> Retry<T>(Func<Task<T>> func)

{

    try

    {

        return await func();

    }

    catch (BillComInvalidSessionException)

    {

        SessionId = new Lazy<string>(() => LoginAsync().Result);

        return await Retry(func);

    }

}

然后,您的重试方法将转到:


private async Task<T> ReadWithRetry<T>(string id, string endpoint)

{

    return await Retry(async () => await Read<T>(id, endpoint));

}


private async Task<List<T>> ListWithRetry<T>(int start, int count, string endpoint, List<FilterData> filterData = null)

{

    return await Retry(async () => await List<T>(start, count, endpoint, filterData));

}


查看完整回答
反对 回复 2022-08-20
  • 1 回答
  • 0 关注
  • 108 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号