Performance is a key factor in building modern .NET applications. Whether you’re developing APIs, microservices, or cloud-based systems, the following techniques can be used to achieve optimal efficiency.
Asynchronous Programming
Prevents blocking threads, allowing non-blocking execution for I/O operations.
Circuit Breaker Patterns — Prevent cascading failures when a service or cache is down.
Concurrency Control — Avoid multiple simultaneous requests overwhelming resources.
Efficient Cache Management
Cache Expiration Strategies — Keep data fresh while reducing unnecessary queries.
Background Cache Refreshing — Preload frequently accessed data before users request it.
In this guide, we’ll explore how to effectively combine async programming, caching, and these advanced optimization techniques with real-world .NET code examples to maximize performance, scalability, and application resilience.
Asynchronous Programming in .NET
Prevents blocking threads, allowing non-blocking execution for I/O operations. This improves responsiveness, scalability, and throughput in .NET applications.
Enhances Performance: Frees up threads for other tasks instead of waiting on slow operations (e.g., database queries, HTTP requests, file I/O).
Improves Scalability: Handles more concurrent users without increasing server resources.
Essential for Modern Architectures: Ideal for microservices, APIs, and cloud-based applications where latency and throughput are critical.
Prevents Deadlocks & UI Freezing: Especially important in Blazor, WPF, and WinForms applications to keep the UI responsive.
Common Use Cases
Fetching data from databases (Entity Framework, Dapper).
Calling external APIs (HttpClient).
Reading/writing files asynchronously.
Queuing background tasks (e.g., using Task.Run(), IHostedService).
Handling real-time WebSockets or SignalR connections.
Example: Use async/await for I/O-bound operations
Avoid Task.Run() for database or API calls.
Using async/await ensures that I/O-bound operations, such as database queries or API calls, do not block the main thread. This allows the application to remain responsive and handle more concurrent requests efficiently.
public async Task<string> FetchDataAsync(string url) { using var client = new HttpClient(); return await client.GetStringAsync(url); }
Example: Parallelize async tasks with Task.WhenAll()
Using Task.WhenAll() allows multiple asynchronous tasks to run in parallel, improving performance by reducing total execution time when dealing with independent I/O-bound operations like API calls or database queries.
var task1 = FetchDataAsync("https://api.example.com/data1"); var task2 = FetchDataAsync("https://api.example.com/data2"); await Task.WhenAll(task1, task2);
Example: Use ConfigureAwait(false) for non-UI applications
This prevents unnecessary thread switches, improving performance.
Using ConfigureAwait(false) in non-UI applications prevents capturing the synchronization context, reducing unnecessary overhead and improving performance in library code, ASP.NET Core, and background services.
public async Task<string> FetchDataAsync(string url) { using var client = new HttpClient(); // Using ConfigureAwait(false) to avoid capturing the context, improving performance string result = await client.GetStringAsync(url).ConfigureAwait(false); return result; }
Caching Strategies in .NET
Caching is an essential technique for improving application performance by reducing load on databases and external APIs. In .NET, there are two primary caching options:
✔ In-Memory Cache (IMemoryCache) – Provides lightning-fast access to data, stored locally within the application’s memory. ✔ Distributed Cache (IDistributedCache) – Enables persistence and sharing of cached data across multiple instances of an application (e.g., using Redis), ideal for distributed environments.
Using IMemoryCache for Local Caching
✅ Pros:
Extremely fast as it operates entirely in memory.
Great for scenarios where data is frequently accessed and doesn’t require persistence beyond the application’s lifecycle.
❌ Cons:
Data is lost upon application restart, as it’s stored only in the local instance’s memory.
private readonly IMemoryCache _cache;
public MyService(IMemoryCache cache) { _cache = cache; }
public async Task<MyData> GetDataAsync(string key) { if (!_cache.TryGetValue(key, out MyData data)) { data = await FetchDataFromDbAsync(key); _cache.Set(key, data, TimeSpan.FromMinutes(5)); } return data; }
Example: Using IDistributedCache (Redis) for Scalability
Leveraging IDistributedCache with Redis provides a scalable solution for caching data across multiple servers, ensuring that your application can share cached data in a distributed environment. While it enables data persistence and is ideal for cloud-based or multi-instance applications, the network calls involved may introduce slight latency compared to in-memory caching.
✅ Pros: Works across multiple servers. ❌ Cons: Slightly slower due to network calls.
private readonly IDistributedCache _cache;
public MyService(IDistributedCache cache) { _cache = cache; }
public async Task<MyData> GetDataAsync(string key) { var cachedData = await _cache.GetStringAsync(key); if (cachedData != null) return JsonSerializer.Deserialize<MyData>(cachedData);
var data = await FetchDataFromDbAsync(key); await _cache.SetStringAsync(key, JsonSerializer.Serialize(data), new DistributedCacheEntryOptions { AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(5) });
The Cache-Aside pattern is a widely recommended caching strategy that offers optimal performance and efficiency. It follows these steps:
Check the cache first — If the data is found in the cache, return it immediately.
Fetch from the DB/API — If the data is not found, asynchronously retrieve it from the database or API, then store the result in the cache for future use.
✅ Non-blocking: Utilizes await for asynchronous database or API calls, allowing other tasks to run concurrently. ✅ Efficient: Data is cached after being fetched, ensuring it’s reused across multiple requests, reducing the need for repeated calls to the data source.
The LazyCache technique helps prevent a cache stampede by ensuring that only one asynchronous request is made for a cache miss, even when multiple requests attempt to fetch the same missing data.
✅ Prevents multiple requests from simultaneously querying the database or API, reducing unnecessary load and preventing performance bottlenecks.
private readonly IAppCache _cache;
public MyService(IAppCache cache) { _cache = cache; }
The Circuit Breaker Pattern helps protect your application from repeated failures by temporarily preventing calls to a cache or database when they become unavailable. This approach is commonly implemented using Polly, a resilience library for .NET.
✅ Ensures system stability during failures by stopping the flow of requests to failing services, allowing time for recovery and preventing cascading errors.
var policy = Policy .Handle<Exception>() .FallbackAsync(() => Task.FromResult(default(MyData)));
var data = await policy.ExecuteAsync(() => GetDataAsync("key"));
Example: Cache Expiration Strategies
Effective cache expiration strategies ensure that cached data remains fresh without overwhelming the system with outdated information. There are two primary types of expiration:
Absolute Expiration: The cache expires after a fixed duration, regardless of access, ensuring that data is refreshed at predictable intervals.
Sliding Expiration: The cache resets its time-to-live (TTL) each time it’s accessed, extending its lifespan with every hit, which is ideal for frequently used data.
var cacheEntryOptions = new MemoryCacheEntryOptions { AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(10), SlidingExpiration = TimeSpan.FromMinutes(2) };
Example: Background Refreshing (Cache Warming)
Background Refreshing (or cache warming) preloads the cache with frequently accessed data before user requests are made, ensuring that responses are quick and reducing latency.
Using IHostedService for Background Cache Refresh: Leverages .NET’s IHostedService to periodically refresh the cache in the background, keeping it populated with up-to-date information.
✅ Ensures frequently accessed data is always ready, providing users with faster response times and reducing the load on the database or external APIs.
public class CacheWarmupService : BackgroundService { private readonly IMemoryCache _cache;
public CacheWarmupService(IMemoryCache cache) { _cache = cache; }
protected override async Task ExecuteAsync(CancellationToken stoppingToken) { while (!stoppingToken.IsCancellationRequested) { var data = await FetchDataFromDbAsync("key"); _cache.Set("key", data, TimeSpan.FromMinutes(5)); await Task.Delay(TimeSpan.FromMinutes(5), stoppingToken); } } }
Integrating async programming, caching, and advanced optimization strategies can significantly improve the performance and scalability of your .NET applications.
Async/await ensures non-blocking operations, maintaining responsiveness even during heavy I/O-bound tasks.
The cache-aside pattern allows for efficient data retrieval by checking the cache first, only falling back to the database when necessary.
LazyCache helps prevent a cache stampede, ensuring that multiple requests don’t overwhelm your database during cache misses.
Redis provides a powerful solution for distributed caching, ideal for cloud-based applications or environments with multiple instances.
Implementing circuit breakers, expiration policies, and background refresh strategies ensures data freshness and application stability.
With these techniques in place, your applications will be fast, resilient, and scalable to handle growing demands.
{"id":"2","mode":"button","open_style":"in_modal","currency_code":"USD","currency_symbol":"$","currency_type":"decimal","blank_flag_url":"https:\/\/robhutton.com\/wp-content\/plugins\/tip-jar-wp\/\/assets\/images\/flags\/blank.gif","flag_sprite_url":"https:\/\/robhutton.com\/wp-content\/plugins\/tip-jar-wp\/\/assets\/images\/flags\/flags.png","default_amount":500,"top_media_type":"featured_image","featured_image_url":"https:\/\/robhutton.com\/wp-content\/uploads\/Screenshot-2025-02-19-163019-100x74.png","featured_embed":"","header_media":null,"file_download_attachment_data":null,"recurring_options_enabled":false,"recurring_options":{"never":{"selected":true,"after_output":"One time only"},"weekly":{"selected":false,"after_output":"Every week"},"monthly":{"selected":false,"after_output":"Every month"},"yearly":{"selected":false,"after_output":"Every year"}},"strings":{"current_user_email":"","current_user_name":"","link_text":"Tip Jar","complete_payment_button_error_text":"Check info and try again","payment_verb":"Pay","payment_request_label":"robhutton.com","form_has_an_error":"Please check and fix the errors above","general_server_error":"Something isn't working right at the moment. Please try again.","form_title":"robhutton.com","form_subtitle":null,"currency_search_text":"Country or Currency here","other_payment_option":"Other payment option","manage_payments_button_text":"Manage your payments","thank_you_message":"Thank you for being a supporter!","payment_confirmation_title":"robhutton.com","receipt_title":"Your Receipt","print_receipt":"Print Receipt","email_receipt":"Email Receipt","email_receipt_sending":"Sending receipt...","email_receipt_success":"Email receipt successfully sent","email_receipt_failed":"Email receipt failed to send. Please try again.","receipt_payee":"Paid to","receipt_statement_descriptor":"This will show up on your statement as","receipt_date":"Date","receipt_transaction_id":"Transaction ID","receipt_transaction_amount":"Amount","refund_payer":"Refund from","login":"Log in to manage your payments","manage_payments":"Manage Payments","transactions_title":"Your Transactions","transaction_title":"Transaction Receipt","transaction_period":"Plan Period","arrangements_title":"Your Plans","arrangement_title":"Manage Plan","arrangement_details":"Plan Details","arrangement_id_title":"Plan ID","arrangement_payment_method_title":"Payment Method","arrangement_amount_title":"Plan Amount","arrangement_renewal_title":"Next renewal date","arrangement_action_cancel":"Cancel Plan","arrangement_action_cant_cancel":"Cancelling is currently not available.","arrangement_action_cancel_double":"Are you sure you'd like to cancel?","arrangement_cancelling":"Cancelling Plan...","arrangement_cancelled":"Plan Cancelled","arrangement_failed_to_cancel":"Failed to cancel plan","back_to_plans":"\u2190 Back to Plans","update_payment_method_verb":"Update","sca_auth_description":"Your have a pending renewal payment which requires authorization.","sca_auth_verb":"Authorize renewal payment","sca_authing_verb":"Authorizing payment","sca_authed_verb":"Payment successfully authorized!","sca_auth_failed":"Unable to authorize! Please try again.","login_button_text":"Log in","login_form_has_an_error":"Please check and fix the errors above","uppercase_search":"Search","lowercase_search":"search","uppercase_page":"Page","lowercase_page":"page","uppercase_items":"Items","lowercase_items":"items","uppercase_per":"Per","lowercase_per":"per","uppercase_of":"Of","lowercase_of":"of","back":"Back to plans","zip_code_placeholder":"Zip\/Postal Code","download_file_button_text":"Download File","input_field_instructions":{"tip_amount":{"placeholder_text":"How much would you like to tip?","initial":{"instruction_type":"normal","instruction_message":"How much would you like to tip? Choose any currency."},"empty":{"instruction_type":"error","instruction_message":"How much would you like to tip? Choose any currency."},"invalid_curency":{"instruction_type":"error","instruction_message":"Please choose a valid currency."}},"recurring":{"placeholder_text":"Recurring","initial":{"instruction_type":"normal","instruction_message":"How often would you like to give this?"},"success":{"instruction_type":"success","instruction_message":"How often would you like to give this?"},"empty":{"instruction_type":"error","instruction_message":"How often would you like to give this?"}},"name":{"placeholder_text":"Name on Credit Card","initial":{"instruction_type":"normal","instruction_message":"Enter the name on your card."},"success":{"instruction_type":"success","instruction_message":"Enter the name on your card."},"empty":{"instruction_type":"error","instruction_message":"Please enter the name on your card."}},"privacy_policy":{"terms_title":"Terms and conditions","terms_body":"Voluntary nature: Tips are non-refundable and given voluntarily. No goods\/services in exchange: Tipping doesn\u2019t entitle the user to any product, service, or preferential treatment. Payment processing: Mention that payments are processed securely through a third-party provider. No liability: You aren\u2019t responsible for transaction failures, fraud, or technical issues.","terms_show_text":"View Terms","terms_hide_text":"Hide Terms","initial":{"instruction_type":"normal","instruction_message":"I agree to the terms."},"unchecked":{"instruction_type":"error","instruction_message":"Please agree to the terms."},"checked":{"instruction_type":"success","instruction_message":"I agree to the terms."}},"email":{"placeholder_text":"Your email address","initial":{"instruction_type":"normal","instruction_message":"Enter your email address"},"success":{"instruction_type":"success","instruction_message":"Enter your email address"},"blank":{"instruction_type":"error","instruction_message":"Enter your email address"},"not_an_email_address":{"instruction_type":"error","instruction_message":"Make sure you have entered a valid email address"}},"note_with_tip":{"placeholder_text":"Your note here...","initial":{"instruction_type":"normal","instruction_message":"Attach a note to your tip (optional)"},"empty":{"instruction_type":"normal","instruction_message":"Attach a note to your tip (optional)"},"not_empty_initial":{"instruction_type":"normal","instruction_message":"Attach a note to your tip (optional)"},"saving":{"instruction_type":"normal","instruction_message":"Saving note..."},"success":{"instruction_type":"success","instruction_message":"Note successfully saved!"},"error":{"instruction_type":"error","instruction_message":"Unable to save note note at this time. Please try again."}},"email_for_login_code":{"placeholder_text":"Your email address","initial":{"instruction_type":"normal","instruction_message":"Enter your email to log in."},"success":{"instruction_type":"success","instruction_message":"Enter your email to log in."},"blank":{"instruction_type":"error","instruction_message":"Enter your email to log in."},"empty":{"instruction_type":"error","instruction_message":"Enter your email to log in."}},"login_code":{"initial":{"instruction_type":"normal","instruction_message":"Check your email and enter the login code."},"success":{"instruction_type":"success","instruction_message":"Check your email and enter the login code."},"blank":{"instruction_type":"error","instruction_message":"Check your email and enter the login code."},"empty":{"instruction_type":"error","instruction_message":"Check your email and enter the login code."}},"stripe_all_in_one":{"initial":{"instruction_type":"normal","instruction_message":"Enter your credit card details here."},"empty":{"instruction_type":"error","instruction_message":"Enter your credit card details here."},"success":{"instruction_type":"normal","instruction_message":"Enter your credit card details here."},"invalid_number":{"instruction_type":"error","instruction_message":"The card number is not a valid credit card number."},"invalid_expiry_month":{"instruction_type":"error","instruction_message":"The card's expiration month is invalid."},"invalid_expiry_year":{"instruction_type":"error","instruction_message":"The card's expiration year is invalid."},"invalid_cvc":{"instruction_type":"error","instruction_message":"The card's security code is invalid."},"incorrect_number":{"instruction_type":"error","instruction_message":"The card number is incorrect."},"incomplete_number":{"instruction_type":"error","instruction_message":"The card number is incomplete."},"incomplete_cvc":{"instruction_type":"error","instruction_message":"The card's security code is incomplete."},"incomplete_expiry":{"instruction_type":"error","instruction_message":"The card's expiration date is incomplete."},"incomplete_zip":{"instruction_type":"error","instruction_message":"The card's zip code is incomplete."},"expired_card":{"instruction_type":"error","instruction_message":"The card has expired."},"incorrect_cvc":{"instruction_type":"error","instruction_message":"The card's security code is incorrect."},"incorrect_zip":{"instruction_type":"error","instruction_message":"The card's zip code failed validation."},"invalid_expiry_year_past":{"instruction_type":"error","instruction_message":"The card's expiration year is in the past"},"card_declined":{"instruction_type":"error","instruction_message":"The card was declined."},"missing":{"instruction_type":"error","instruction_message":"There is no card on a customer that is being charged."},"processing_error":{"instruction_type":"error","instruction_message":"An error occurred while processing the card."},"invalid_request_error":{"instruction_type":"error","instruction_message":"Unable to process this payment, please try again or use alternative method."},"invalid_sofort_country":{"instruction_type":"error","instruction_message":"The billing country is not accepted by SOFORT. Please try another country."}}}},"fetched_oembed_html":false}
{"id":"4","mode":"text_link","open_style":"in_modal","currency_code":"USD","currency_symbol":"$","currency_type":"decimal","blank_flag_url":"https:\/\/robhutton.com\/wp-content\/plugins\/tip-jar-wp\/\/assets\/images\/flags\/blank.gif","flag_sprite_url":"https:\/\/robhutton.com\/wp-content\/plugins\/tip-jar-wp\/\/assets\/images\/flags\/flags.png","default_amount":500,"top_media_type":"featured_image","featured_image_url":"https:\/\/robhutton.com\/wp-content\/uploads\/Screenshot-2025-02-19-163019-100x74.png","featured_embed":"","header_media":null,"file_download_attachment_data":null,"recurring_options_enabled":true,"recurring_options":{"never":{"selected":true,"after_output":"One time only"},"weekly":{"selected":false,"after_output":"Every week"},"monthly":{"selected":false,"after_output":"Every month"},"yearly":{"selected":false,"after_output":"Every year"}},"strings":{"current_user_email":"","current_user_name":"","link_text":"Like my articles? Tips are appreciated.","complete_payment_button_error_text":"Check info and try again","payment_verb":"Pay","payment_request_label":"","form_has_an_error":"Please check and fix the errors above","general_server_error":"Something isn't working right at the moment. Please try again.","form_title":"","form_subtitle":null,"currency_search_text":"Country or Currency here","other_payment_option":"Other payment option","manage_payments_button_text":"Manage your payments","thank_you_message":"Thank you for being a supporter!","payment_confirmation_title":"","receipt_title":"Your Receipt","print_receipt":"Print Receipt","email_receipt":"Email Receipt","email_receipt_sending":"Sending receipt...","email_receipt_success":"Email receipt successfully sent","email_receipt_failed":"Email receipt failed to send. Please try again.","receipt_payee":"Paid to","receipt_statement_descriptor":"This will show up on your statement as","receipt_date":"Date","receipt_transaction_id":"Transaction ID","receipt_transaction_amount":"Amount","refund_payer":"Refund from","login":"Log in to manage your payments","manage_payments":"Manage Payments","transactions_title":"Your Transactions","transaction_title":"Transaction Receipt","transaction_period":"Plan Period","arrangements_title":"Your Plans","arrangement_title":"Manage Plan","arrangement_details":"Plan Details","arrangement_id_title":"Plan ID","arrangement_payment_method_title":"Payment Method","arrangement_amount_title":"Plan Amount","arrangement_renewal_title":"Next renewal date","arrangement_action_cancel":"Cancel Plan","arrangement_action_cant_cancel":"Cancelling is currently not available.","arrangement_action_cancel_double":"Are you sure you'd like to cancel?","arrangement_cancelling":"Cancelling Plan...","arrangement_cancelled":"Plan Cancelled","arrangement_failed_to_cancel":"Failed to cancel plan","back_to_plans":"\u2190 Back to Plans","update_payment_method_verb":"Update","sca_auth_description":"Your have a pending renewal payment which requires authorization.","sca_auth_verb":"Authorize renewal payment","sca_authing_verb":"Authorizing payment","sca_authed_verb":"Payment successfully authorized!","sca_auth_failed":"Unable to authorize! Please try again.","login_button_text":"Log in","login_form_has_an_error":"Please check and fix the errors above","uppercase_search":"Search","lowercase_search":"search","uppercase_page":"Page","lowercase_page":"page","uppercase_items":"Items","lowercase_items":"items","uppercase_per":"Per","lowercase_per":"per","uppercase_of":"Of","lowercase_of":"of","back":"Back to plans","zip_code_placeholder":"Zip\/Postal Code","download_file_button_text":"Download File","input_field_instructions":{"tip_amount":{"placeholder_text":"How much would you like to tip?","initial":{"instruction_type":"normal","instruction_message":"How much would you like to tip? Choose any currency."},"empty":{"instruction_type":"error","instruction_message":"How much would you like to tip? Choose any currency."},"invalid_curency":{"instruction_type":"error","instruction_message":"Please choose a valid currency."}},"recurring":{"placeholder_text":"Recurring","initial":{"instruction_type":"normal","instruction_message":"How often would you like to give this?"},"success":{"instruction_type":"success","instruction_message":"How often would you like to give this?"},"empty":{"instruction_type":"error","instruction_message":"How often would you like to give this?"}},"name":{"placeholder_text":"Name on Credit Card","initial":{"instruction_type":"normal","instruction_message":"Enter the name on your card."},"success":{"instruction_type":"success","instruction_message":"Enter the name on your card."},"empty":{"instruction_type":"error","instruction_message":"Please enter the name on your card."}},"privacy_policy":{"terms_title":"Terms and conditions","terms_body":"Voluntary nature: Tips are non-refundable and given voluntarily. No goods\/services in exchange: Tipping doesn\u2019t entitle the user to any product, service, or preferential treatment. Payment processing: Mention that payments are processed securely through a third-party provider. No liability: You aren\u2019t responsible for transaction failures, fraud, or technical issues.","terms_show_text":"View Terms","terms_hide_text":"Hide Terms","initial":{"instruction_type":"normal","instruction_message":"I agree to the terms."},"unchecked":{"instruction_type":"error","instruction_message":"Please agree to the terms."},"checked":{"instruction_type":"success","instruction_message":"I agree to the terms."}},"email":{"placeholder_text":"Your email address","initial":{"instruction_type":"normal","instruction_message":"Enter your email address"},"success":{"instruction_type":"success","instruction_message":"Enter your email address"},"blank":{"instruction_type":"error","instruction_message":"Enter your email address"},"not_an_email_address":{"instruction_type":"error","instruction_message":"Make sure you have entered a valid email address"}},"note_with_tip":{"placeholder_text":"Your note here...","initial":{"instruction_type":"normal","instruction_message":"Attach a note to your tip (optional)"},"empty":{"instruction_type":"normal","instruction_message":"Attach a note to your tip (optional)"},"not_empty_initial":{"instruction_type":"normal","instruction_message":"Attach a note to your tip (optional)"},"saving":{"instruction_type":"normal","instruction_message":"Saving note..."},"success":{"instruction_type":"success","instruction_message":"Note successfully saved!"},"error":{"instruction_type":"error","instruction_message":"Unable to save note note at this time. Please try again."}},"email_for_login_code":{"placeholder_text":"Your email address","initial":{"instruction_type":"normal","instruction_message":"Enter your email to log in."},"success":{"instruction_type":"success","instruction_message":"Enter your email to log in."},"blank":{"instruction_type":"error","instruction_message":"Enter your email to log in."},"empty":{"instruction_type":"error","instruction_message":"Enter your email to log in."}},"login_code":{"initial":{"instruction_type":"normal","instruction_message":"Check your email and enter the login code."},"success":{"instruction_type":"success","instruction_message":"Check your email and enter the login code."},"blank":{"instruction_type":"error","instruction_message":"Check your email and enter the login code."},"empty":{"instruction_type":"error","instruction_message":"Check your email and enter the login code."}},"stripe_all_in_one":{"initial":{"instruction_type":"normal","instruction_message":"Enter your credit card details here."},"empty":{"instruction_type":"error","instruction_message":"Enter your credit card details here."},"success":{"instruction_type":"normal","instruction_message":"Enter your credit card details here."},"invalid_number":{"instruction_type":"error","instruction_message":"The card number is not a valid credit card number."},"invalid_expiry_month":{"instruction_type":"error","instruction_message":"The card's expiration month is invalid."},"invalid_expiry_year":{"instruction_type":"error","instruction_message":"The card's expiration year is invalid."},"invalid_cvc":{"instruction_type":"error","instruction_message":"The card's security code is invalid."},"incorrect_number":{"instruction_type":"error","instruction_message":"The card number is incorrect."},"incomplete_number":{"instruction_type":"error","instruction_message":"The card number is incomplete."},"incomplete_cvc":{"instruction_type":"error","instruction_message":"The card's security code is incomplete."},"incomplete_expiry":{"instruction_type":"error","instruction_message":"The card's expiration date is incomplete."},"incomplete_zip":{"instruction_type":"error","instruction_message":"The card's zip code is incomplete."},"expired_card":{"instruction_type":"error","instruction_message":"The card has expired."},"incorrect_cvc":{"instruction_type":"error","instruction_message":"The card's security code is incorrect."},"incorrect_zip":{"instruction_type":"error","instruction_message":"The card's zip code failed validation."},"invalid_expiry_year_past":{"instruction_type":"error","instruction_message":"The card's expiration year is in the past"},"card_declined":{"instruction_type":"error","instruction_message":"The card was declined."},"missing":{"instruction_type":"error","instruction_message":"There is no card on a customer that is being charged."},"processing_error":{"instruction_type":"error","instruction_message":"An error occurred while processing the card."},"invalid_request_error":{"instruction_type":"error","instruction_message":"Unable to process this payment, please try again or use alternative method."},"invalid_sofort_country":{"instruction_type":"error","instruction_message":"The billing country is not accepted by SOFORT. Please try another country."}}}},"fetched_oembed_html":false}