c#题例-2025-06-30 13:19:44
日期: 2025-06-30 分类: AI写作 13次阅读
当然可以!下面是一道**专家级别**的 C# 逻辑面试题,它结合了 **委托、泛型、异步编程、闭包捕获、线程安全、设计模式(工厂 + 策略)** 等多个高级概念,考察候选人对语言机制的理解深度和实际工程中的综合运用能力:
---
### 🧠 面试题:实现一个支持并发、可扩展的异步任务调度器(Advanced Async Task Scheduler)
#### 背景描述:
你正在为一个高性能后台服务开发一个任务调度器模块。该模块需要能够注册多种类型的异步任务处理逻辑,并在运行时根据不同的输入参数动态选择执行策略。
---
### 💡 问题要求:
请使用 C# 实现一个名为 `DynamicTaskScheduler
1. **支持注册多个异步任务处理器**:
- 每个处理器由一个唯一的键(如 `string` 或枚举)标识。
- 处理器是 `Func
2. **运行时根据传入的键选择对应的处理器并异步执行**:
- 如果找不到对应键,抛出异常或返回默认值(可选)。
- 支持取消操作(CancellationToken)。
3. **线程安全**:
- 多线程下注册和调用都是线程安全的。
4. **性能优化建议**:
- 使用不可变集合(如 `ImmutableDictionary`)来保证注册表的线程安全性与快照隔离。
- 可以考虑使用 `ConcurrentDictionary` 做缓存加速访问。
5. **可扩展性**:
- 提供一种方式让用户自定义“未找到处理器”的行为(例如通过策略模式或回调函数)。
6. **附加挑战(进阶)**:
- 提供一个静态工厂方法,支持通过依赖注入的方式创建实例(例如从 IServiceCollection 中获取所有处理器)。
- 处理器可以通过特性标记自动注册(Attribute-based Auto Registration)。
---
### ✅ 示例代码结构提示:
```csharp
public class DynamicTaskScheduler
{
private readonly ImmutableDictionary
private readonly Func
public DynamicTaskScheduler(
IEnumerable<(string Key, Func
Func
{
// 初始化 handlers 到 ImmutableDictionary
_handlers = ...;
_notFoundHandler = notFoundHandler;
}
public Task
{
if (_handlers.TryGetValue(key, out var handler))
return handler(input, ct);
if (_notFoundHandler != null)
return _notFoundHandler(key, input, ct);
throw new KeyNotFoundException($"No handler registered for key: {key}");
}
public DynamicTaskScheduler
{
return new DynamicTaskScheduler
}
}
```
---
### 🧪 示例使用场景:
```csharp
var scheduler = new DynamicTaskScheduler
new[]
{
("Double", (input, ct) => Task.FromResult(int.Parse(input) * 2)),
("Square", (input, ct) => Task.FromResult(int.Parse(input) * int.Parse(input)))
},
(key, _, _) => throw new InvalidOperationException($"Unknown operation: {key}")
);
int result = await scheduler.ExecuteAsync("Double", "5");
Console.WriteLine(result); // 输出 10
result = await scheduler.ExecuteAsync("Cube", "3"); // 应触发 notFoundHandler
```
---
### 🎯 考察点总结:
| 技术点 | 是否考察 |
|--------|----------|
| 泛型编程 | ✅ |
| 异步编程模型(async/await) | ✅ |
| 委托与函数式编程 | ✅ |
| 不可变数据结构(ImmutableCollections) | ✅ |
| 线程安全设计 | ✅ |
| 设计模式(策略、工厂、装饰者) | ✅ |
| 自定义错误处理 | ✅ |
| 可扩展性与可维护性 | ✅ |
| 高级 API 使用(如 CancellationToken) | ✅ |
---
如果你想要我提供这道题目的参考实现或者测试代码,也可以告诉我 😊
除特别声明,本站所有文章均为原创,如需转载请以超级链接形式注明出处:SmartCat's Blog
标签:AI写作
精华推荐