亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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 關注
  • 107 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號