๐Ÿ”ง Utilities & Tools

Helpful utilities for background tasks, debugging, and productivity enhancements

๐Ÿ”ฅ FireAndForget Utility

Execute non-critical background tasks without blocking your main thread.

  • Safe task execution with automatic error handling
  • No need to await - truly fire-and-forget
  • Built-in logging for troubleshooting
  • Perfect for notifications, logging, analytics
๐Ÿš cURL Command Generator

Generate cURL commands from your HTTP requests for debugging.

  • Recreate requests outside your application
  • Share with team members for collaboration
  • Test APIs from command line
  • Includes headers and request body
๐Ÿ“ Code Examples
FireAndForget Utility
// Register the utility in Program.cs
builder.Services.AddSingleton<FireAndForgetUtility>();

// Use in your service
public class MyService
{
    private readonly FireAndForgetUtility _fireAndForget;
    
    public MyService(FireAndForgetUtility fireAndForget)
    {
        _fireAndForget = fireAndForget;
    }
    
    public void ProcessOrder(Order order)
    {
      // Critical: Save the order (awaited)
   await SaveOrderToDatabase(order);
   
        // Non-critical: Send confirmation email (fire-and-forget)
        _fireAndForget.SafeFireAndForget(
      SendConfirmationEmailAsync(order.Email),
     $"Send confirmation email for order {order.Id}");
      
        // Non-critical: Update analytics (fire-and-forget)
        _fireAndForget.SafeFireAndForget(
      UpdateAnalyticsAsync(order),
            $"Update analytics for order {order.Id}");
        
    // Return immediately without waiting for emails or analytics
        return Ok();
    }
    
    private async Task SendConfirmationEmailAsync(string email)
 {
        // Email sending logic
        await _emailService.SendAsync(email, "Order Confirmed");
    }
    
    private async Task UpdateAnalyticsAsync(Order order)
    {
        // Analytics update logic
        await _analyticsService.TrackOrderAsync(order);
    }
}
cURL Command Generator
using WebSpark.HttpClientUtility.Utilities;

// Generate cURL command from request
var curlCommand = CurlCommandSaver.GenerateCurlCommand(
    requestPath: "https://api.example.com/orders",
    method: HttpMethod.Post,
    headers: new Dictionary<string, string>
    {
{ "Authorization", "Bearer token123" },
     { "Content-Type", "application/json" }
    },
    body: "{\"productId\": 42, \"quantity\": 1}"
);

// Output: curl -X POST "https://api.example.com/orders" \
//   -H "Authorization: Bearer token123" \
//   -H "Content-Type: application/json" \
//   -d "{\"productId\": 42, \"quantity\": 1}"

// Save to file for later use
await File.WriteAllTextAsync("debug-request.sh", curlCommand);

// Or log it for debugging
_logger.LogDebug("Request as cURL: {CurlCommand}", curlCommand);
Query String Builder
// Build complex query strings easily
var queryParams = new Dictionary<string, string>
{
    { "category", "electronics" },
    { "minPrice", "100" },
    { "maxPrice", "500" },
    { "sortBy", "price" },
  { "order", "desc" }
};

// Convert to query string
var queryString = string.Join("&", 
    queryParams.Select(kvp => $"{Uri.EscapeDataString(kvp.Key)}={Uri.EscapeDataString(kvp.Value)}"));

var url = $"https://api.example.com/products?{queryString}";
// Result: https://api.example.com/products?category=electronics&minPrice=100&maxPrice=500&sortBy=price&order=desc
๐ŸŽฏ Common Use Cases
FireAndForget Perfect For:
  • ๐Ÿ“ง Sending email notifications
  • ๐Ÿ“Š Updating analytics/metrics
  • ๐Ÿ“ Logging to external services
  • ๐Ÿ”” Pushing notifications
  • ๐Ÿ”„ Cache warming
  • ๐Ÿงน Background cleanup tasks
cURL Generator Perfect For:
  • ๐Ÿ› Debugging API issues
  • ๐Ÿค Sharing requests with teammates
  • ๐Ÿ“– Documentation generation
  • ๐Ÿงช Testing outside the application
  • ๐Ÿ” Reproducing production issues
  • ๐Ÿ“‹ Support ticket details
Best Practices
FireAndForget โœ… Do
  • Use for truly non-critical operations
  • Provide descriptive task names
  • Implement proper error handling in tasks
  • Consider idempotency
  • Monitor background task failures
FireAndForget โŒ Don't
  • Use for critical business logic
  • Rely on immediate execution
  • Store results for later use
  • Use for transaction-dependent operations
  • Forget about monitoring/logging
โœจ Additional Utilities
URL Sanitization

Automatically sanitize URLs before logging to prevent sensitive data exposure:

// Removes query parameters, credentials, and sensitive data
var safeUrl = LoggingUtility.SanitizeUrl("https://user:[email protected]/data?apiKey=secret");
// Result: "https://api.com/data"
Error Handling Utilities

Enrich exceptions with context for better debugging:

var context = new Dictionary<string, object>
{
    ["UserId"] = userId,
    ["RequestPath"] = requestPath,
    ["CorrelationId"] = correlationId
};

var enrichedException = ErrorHandlingUtility.EnrichException(
    exception,
    "Failed to process user request",
    context
);