我有一个名为ExecuteAsyncServiceRequest
的方法,带有重载,您会注意到这两种方法的主体是相似的。我发现自己想知道是否有更简洁的方式来编写这些方法?具体来说,不必在方法体中重复自己。具有类似主体的泛型和非泛型方法
在此先感谢!
/// <summary>
/// Executes an async service request which returns a response of type TResponse
/// </summary>
/// <param name="execute">The service request to execute</param>
/// <param name="success">Callback when the service request is successful</param>
/// <param name="failure">Callback when the service request fails</param>
/// <typeparam name="TResponse">Type of the expected ServiceResult returned from the async request</typeparam>
protected async void ExecuteAsyncServiceRequest<TResponse>(Func<Task<ServiceResult<TResponse>>> execute,
Action<TResponse> success,
Action<string> failure)
{
ServiceResult<TResponse> result = await execute();
if (result.ResultCode == ServiceResult.ServiceResultCode.Failed)
failure(result.FailureDetails);
success(result.Response);
}
/// <summary>
/// Executes an async service request
/// </summary>
/// <param name="execute">The service request to execute</param>
/// <param name="success">Callback when the service request is successful</param>
/// <param name="failure">Callback when the service request fails</param>
protected async void ExecuteAsyncServiceRequest(Func<Task<ServiceResult>> execute,
Action success,
Action <string> failure)
{
ServiceResult result = await execute();
if (result.ResultCode == ServiceResult.ServiceResultCode.Failed)
failure(result.FailureDetails);
success();
}
请提供一个你已经尝试了什么,以及什么不起作用的解释。 – SneakyTactician
@SneakyTactician代码运行良好,但我发现自己提出了这样一个问题:“如何优化?可以优化吗?”。也许答案只是“不”? –
如果ServiceResult和TResponse从同一个类继承或使用相同的接口,那么您可以一般地组合这些方法。如果没有,请参阅斯蒂芬的回答。 – SneakyTactician