public async Task <AnalysisResult> PerformAnalysisAsync(AnalysisContext context) { context.ThrowIfNull(nameof(context)); _logger.Info("Starting algorithm analysis."); _logger.Info($"Parameters: {context.ToLogString()}"); try { AnalysisResult result = await PerformInternalAsync(context); _logger.Info($"Analysis completely finished. Final result: {result.ToLogString()}"); return(result); } catch (Exception ex) { string message = $"Analysis failed: {ex.Message}"; _logger.Error(ex, message); return(AnalysisResult.CreateFailure(message, context)); } }