C# try catch with server async Task 的重构建议 return
Refactor suggestion for C# try catch with server async Task return
关于方法
- 会话有效时应该post向服务器端发送数据
- [本地检查会话]-[刷新]-[发送数据]
- [如果发生 401] - [刷新] - [发送数据]
我不确定
- 如果 "IF" 条件和 "try-catch" 块中有任何冗余,可以简化。
- 此外,不熟悉 Task 和异步的东西,将 "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
}
}
编辑:
在那里添加了一个简单的流程
至少你现在的可读性很好。
您在 "refresh" 和 "send data" 上重复了一些内容,但考虑到我可以在一个屏幕上看到所有的工作流程和故障点,我认为它比更通用的方法更重要.
我要更改它的唯一原因是,如果刷新或发送数据功能变得非常重要,并且会干扰对身份验证工作流程的理解。
如果您确实想将其重新设计为练习,我认为您正在寻找的技术是“continuation task”。
关于方法
- 会话有效时应该post向服务器端发送数据
- [本地检查会话]-[刷新]-[发送数据]
- [如果发生 401] - [刷新] - [发送数据]
我不确定
- 如果 "IF" 条件和 "try-catch" 块中有任何冗余,可以简化。
- 此外,不熟悉 Task 和异步的东西,将 "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
}
}
编辑:
在那里添加了一个简单的流程
至少你现在的可读性很好。
您在 "refresh" 和 "send data" 上重复了一些内容,但考虑到我可以在一个屏幕上看到所有的工作流程和故障点,我认为它比更通用的方法更重要.
我要更改它的唯一原因是,如果刷新或发送数据功能变得非常重要,并且会干扰对身份验证工作流程的理解。
如果您确实想将其重新设计为练习,我认为您正在寻找的技术是“continuation task”。