代码片段
实用代码示例与解决方案库
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;