语言

C# 异步并行处理

csharp
使用 Task.WhenAll 并行执行多个异步操作并限制并发数。
public async Task ProcessDataInParallel(List<string> urls)
{
    var semaphore = new SemaphoreSlim(5); // 限制并发数为 5
    var tasks = urls.Select(async url =>
    {
        await semaphore.WaitAsync();
        try {
            await DownloadAsync(url);
        } finally {
            semaphore.Release();
        }
    });
    await Task.WhenAll(tasks);
}

.NET 8 - Keyed Services

csharp
使用 .NET 8 新增的 Keyed Services 特性来实现同一接口的不同实现注入。
// 注册服务
builder.Services.AddKeyedSingleton<ICache, MemoryCache>("Memory");
builder.Services.AddKeyedSingleton<ICache, RedisCache>("Redis");

// 注入使用
public class DataService([FromKeyedServices("Redis")] ICache cache)
{
    public void GetData()
    {
        // ...
    }
}

EF Core 批量更新

csharp
使用 EF Core 7+ 的 ExecuteUpdateAsync 进行高性能批量更新。
await context.Users
    .Where(u => u.LastLogin < DateTime.Now.AddDays(-30))
    .ExecuteUpdateAsync(s => s.SetProperty(u => u.IsActive, false));

T-SQL - 递归查询 (CTE)

sql
使用公用表表达式 (CTE) 进行递归查询,常用于处理树形结构数据(如菜单、组织架构)。
WITH TreeCTE AS (
    SELECT Id, ParentId, Name, 0 AS Level
    FROM Departments
    WHERE ParentId IS NULL
    
    UNION ALL
    
    SELECT d.Id, d.ParentId, d.Name, t.Level + 1
    FROM Departments d
    INNER JOIN TreeCTE t ON d.ParentId = t.Id
)
SELECT * FROM TreeCTE ORDER BY Level, Id;