私はExecuteAsyncServiceRequest
というメソッドをオーバーロードしていますが、両方のメソッドの本体が似ていることがわかります。私は自分自身が、これらのメソッドを書くためのより簡潔な方法があるのだろうと思っています。具体的には、メソッド本体で自分自身を繰り返す必要はありません。類似の本体を持つ一般的で非汎用的なメソッド
ありがとうございます! void
タイプではないこと、具体的 -
/// <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