c#题例-2025-07-19 21:18:26
日期: 2025-07-19 分类: AI写作 11次阅读
当然可以!以下是一道**专家级别**的 C# 逻辑面试题,涉及 **委托、泛型、闭包、异步编程、线程安全** 等多个高级概念,考察候选人对 C# 语言特性的深入理解和实际应用能力:
---
### 🧠 面试题:实现一个线程安全的事件总线(Event Bus)
#### 📌 题目描述:
请你使用 C# 实现一个 **线程安全的事件总线(Event Bus)系统**,满足以下要求:
1. 支持注册和取消注册事件处理函数(使用泛型)。
2. 支持发布事件,所有订阅该事件的处理函数都会被调用。
3. 事件处理函数可以是同步或异步(`Func
4. 必须保证线程安全(支持并发注册、取消注册和发布事件)。
5. 避免内存泄漏(比如弱引用或自动清理无效订阅)可选加分。
6. 提供一个简单的使用示例。
---
### 示例接口定义(仅供参考):
```csharp
public interface IEventBus
{
void Subscribe
void Subscribe
void Unsubscribe
void Unsubscribe
void Publish
}
```
---
### 🎯 考察点:
- 委托与泛型的灵活使用。
- 线程安全(如使用 `ConcurrentDictionary`, `ReaderWriterLockSlim`, `lock` 等)。
- 异步编程模型(如何处理同步和异步混合的事件处理器)。
- 事件生命周期管理。
- 对 `Action` 与 `Func` 的理解。
- 对 `object.GetHashCode()` 和 `Equals()` 的理解(用于订阅管理)。
- 可选:弱引用处理、事件聚合器设计等。
---
### ✅ 示例用法:
```csharp
var bus = new EventBus();
bus.Subscribe
bus.Subscribe
{
await Task.Delay(100);
Console.WriteLine("Async handler: " + s);
});
bus.Publish("Hello EventBus!");
```
输出:
```
Sync handler: Hello EventBus!
Async handler: Hello EventBus!
```
---
### 💡 提示:
- 使用 `ConcurrentDictionary
- 在 `Publish` 方法中,需深拷贝当前处理器列表以避免并发修改问题。
- 可以区分同步和异步处理器,或统一处理为 `Func
- 异步处理时注意是否要使用 `await`,是否需要并行执行多个异步处理器。
---
如果你需要我提供一个**参考实现**,我也可以继续为你写出完整代码。是否需要?
除特别声明,本站所有文章均为原创,如需转载请以超级链接形式注明出处:SmartCat's Blog
标签:AI写作
精华推荐