簡體   English   中英

重構 C# try catch 與服務器異步任務返回的建議

[英]Refactor suggestion for C# try catch with server async Task return

關於方法

  1. 當會話有效時,它應該將數據發布到服務器端。
  2. [本地檢查會話] - [刷新] - [發送數據]
  3. [如果 401 發生] - [刷新] - [發送數據]

我不確定

  1. 如果“IF”條件和“try-catch”塊中有任何冗余,則可以簡化。
  2. 另外,不熟悉 Task 和 async 的東西,將“PendRefresh”任務放入其中的方式是否正確或合適?

感謝您的任何建議!

private async Task<TResult> PostRequestAsync<TResult>(ServerRequest request)
{
    //check if expired on client side
    if (LocalHelper.IsExpired(request))
    {
        request.Token = await PendRefresh().ConfigureAwait(false);      //[Refresh]
    }

    try
    {
        return await PostServerAsync<TResult>(request).ConfigureAwait(false);   //[Send Data]
    }
    catch (ServerException e)
    {
        //session expired on the server side
        if (e.Code == HttpStatusCode.Unauthorized)
        {
            request.Token = await PendRefresh().ConfigureAwait(false);              //[Refresh]
            return await PostServerAsync<TResult>(request).ConfigureAwait(false);   //[Send Data]
        }
    }
    return default;

    //Q2, is this OK?
    async Task<string> PendRefresh()
        {
        //something here
    }
}

編輯:

在那里添加了一個簡單的流程

simple img

你現在所擁有的至少是非常易讀的。

您正在重復“刷新”和“發送數據”,但鑒於我可以在一個屏幕中看到所有工作流程和故障點,我認為這比更通用的方法更重要。

我要更改此設置的唯一原因是刷新或發送數據功能變得不重要並干擾了對身份驗證工作流程的理解。

如果您確實想將其重新構建為練習,我認為您正在尋找的技術是“ 延續任務”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM