public void InvokeAsync(AsyncExecutionRequest request, Action <AsyncExecutionResponse> responseHandler = null) { responseHandler = responseHandler ?? DefaultResponseHandler; if (!request.UseCachedResponse) { CallExecuteRemoteAsync(request, responseHandler); } else { AsyncExecutionResponseData response = CallbackService.GetCachedResponse(request.GetRequestHash()); if (response != null && new Instant(DateTime.UtcNow).DiffInMinutes(response.Created.Value) <= request.ResponseMaxAgeInMinutes) { AsyncExecutionResponse result = response.CopyAs <AsyncExecutionResponse>(); result.Success = true; result.Request = request; result.ResultJson = response.ResultJson; responseHandler(result); } else { if (response != null) { CallbackService.AsyncCallbackRepository.Delete(response); } CallExecuteRemoteAsync(request, responseHandler); } } }