The post discusses a common inefficiency in multithreaded applications where multiple tasks redundantly compute the same result, particularly in scenarios involving high-concurrency requests to remote servers. It introduces the task-coalescing technique, which ensures that only one task fetches the data while others reuse the result, reducing wasteful work. Using .NET’s Lazy<T>
and ConcurrentDictionary<TKey, TValue>
, the example implementation demonstrates how to achieve this efficiently, mitigating issues like cache stampedes and improving performance with minimal code changes.
The article outlines four ways to send logs to AWS Cloudwatch from a .NET Lambda function. It covers ILambdaContext.Logger
, a basic option for simple logging; LambdaILogger
, which integrates with Microsoft’s ILogger
for richer features but has limitations with parameter serialization; Serilog
, a highly customizable library for structured logging and control over log formats; and AWS Lambda Powertools
, a straightforward utility tailored for AWS Lambda with built-in X-Ray trace correlation. The choice between these methods depends on the need for simplicity or advanced customization.
This post provides a step-by-step guide to setting up a development environment that allows debugging .NET Core applications inside a Docker container running on WSL, using Visual Studio, without relying on Docker Desktop. It outlines the prerequisites, the process of installing and configuring Docker tools on WSL2, enabling SSH for remote debugging, and attaching Visual Studio to the running container for debugging. While this approach requires manual setup, it offers a cost-effective alternative to Docker Desktop for teams who prefer or need to avoid its licensing fees.
The post explains how to use EF Core Interceptors to simulate database failures, enabling tests for application resiliency. It introduces a custom MockFailCommandInterceptor
that selectively throws exceptions during specific database operations, such as INSERT
, to test failure scenarios. This approach ensures that failure handling is thoroughly tested.
The blog post addresses how to route API requests that use the same HTTP verb and path but differ in behavior based on HTTP header values, such as the Accept
header for versioning. It introduces a custom Accepts
attribute in ASP.NET Core, which implements the IActionConstraint
interface to direct requests to specific actions based on header values. This approach can be extended to handle any scenario where routing depends on header values, beyond versioning.