首页 > 解决方案 > 重构 C# try catch 与服务器异步任务返回的建议

问题描述

关于方法

  1. 当会话有效时,它应该将数据发布到服务器端。
  2. [本地检查会话] - [刷新] - [发送数据]
  3. [如果发生 401] - [刷新] - [发送数据]

我不确定

  1. 如果“IF”条件和“try-catch”块中有任何冗余,则可以简化。
  2. 另外,不熟悉任务和异步的东西,将“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
    }
}

编辑:

在那里添加了一个简单的流程

简单的图片

标签: c#refactoringtry-catchtask

解决方案


你现在拥有的至少是非常可读的。

您正在用“刷新”和“发送数据”重复自己,但鉴于我可以在一个屏幕上看到所有工作流和故障点,我认为这比更通用的方法更重要。

我要更改此设置的唯一原因是刷新或发送数据功能变得不重要并干扰了对身份验证工作流程的理解。

如果您确实想将其重新构建为练习,我认为您正在寻找的技术是“延续任务”。


推荐阅读