c#题例-2025-07-11 10:18:47
日期: 2025-07-11 分类: AI写作 11次阅读
当然可以!下面是一道**专家级别**的 C# 逻辑面试题,涉及 **泛型、委托、闭包、异步编程模型(TPL) 和线程安全** 等高级概念,适合用于考察资深 C# 开发者的综合能力。
---
### 🧠 面试题:实现一个线程安全的事件总线(Event Bus)
#### 背景:
你需要为一个大型分布式系统设计并实现一个简单的**线程安全事件总线(Thread-Safe Event Bus)**,支持事件的发布/订阅机制。该事件总线需要具备以下特性:
- 支持多个事件类型。
- 订阅者可以通过委托(`Func
- 支持异步事件处理。
- 支持取消订阅。
- 必须是线程安全的(并发注册、取消订阅和发布事件时不能出错)。
- 不允许内存泄漏(如持有对象引用导致无法释放)。
---
### ✅ 要求:
1. 实现 `IEventBus` 接口如下:
```csharp
public interface IEventBus
{
void Subscribe
void Unsubscribe
Task PublishAsync
}
```
2. 实现类 `ThreadSafeEventBus` 满足上述所有要求。
---
### 💡 提示:
- 使用 `ConcurrentDictionary` 来保存每个事件类型的处理器集合。
- 注意委托的相等性比较问题(直接使用 `Func<,>` 可能会有闭包的问题)。
- 建议使用 `WeakReference` 或封装成弱引用包装器来避免内存泄漏。
- 所有订阅和发布操作必须是线程安全的。
- 发布事件时应并发执行各个处理器,并汇总异常(可使用 `Task.WhenAll` + 异常过滤)。
---
### 🎯 示例代码结构(仅供参考):
```csharp
public class ThreadSafeEventBus : IEventBus
{
private readonly ConcurrentDictionary
public void Subscribe
{
// TODO: 实现线程安全的订阅逻辑
}
public void Unsubscribe
{
// TODO: 实现取消订阅逻辑
}
public async Task PublishAsync
{
// TODO: 安全获取所有有效处理器并异步调用
}
}
internal class WeakHandler
{
private readonly WeakReference
public WeakHandler(Func
除特别声明,本站所有文章均为原创,如需转载请以超级链接形式注明出处:SmartCat's Blog
标签:AI写作
上一篇:无
精华推荐