c#题例-2025-07-01 05:59:27
日期: 2025-07-01 分类: AI写作 12次阅读
当然可以!以下是一道**专家级别**的 C# 程序员逻辑面试题,涉及 **委托、泛型、异步编程和设计模式** 的综合运用,适合考察候选人的高级语言特性和系统设计能力。
---
### 🧠 面试题:实现一个可扩展的异步事件总线(Event Bus)
#### 背景:
你正在为一个模块化系统设计一个**轻量级异步事件总线(Event Bus)**。这个事件总线需要支持:
- 多种事件类型(使用泛型)
- 注册多个事件处理器(Handler)
- 异步处理事件
- 支持取消注册处理器
- 可扩展性(便于将来添加过滤、优先级等功能)
---
### ✅ 任务要求:
请你编写一个 `IEventBus` 接口及其实现类 `AsyncEventBus`,满足以下功能:
```csharp
public interface IEventBus
{
void Subscribe
void Unsubscribe
Task PublishAsync
}
```
#### 功能说明:
- `Subscribe
- `Unsubscribe
- `PublishAsync
---
### 💡 进阶问题(供进一步讨论):
1. 如何确保在并发环境下订阅和发布的线程安全?
2. 如果某个 Handler 抛出异常,如何避免中断其他 Handler 的执行?
3. 如何扩展以支持同步与异步混合的 Handler?
4. 如何引入“一次性订阅”或“按优先级执行”的特性?
5. 是否可以结合依赖注入(DI)来管理 Handlers?
---
### 📌 示例代码调用方式:
```csharp
var eventBus = new AsyncEventBus();
eventBus.Subscribe
{
await Task.Delay(100); // 模拟异步操作
Console.WriteLine($"Received log: {e.Message}");
});
await eventBus.PublishAsync(new LogEvent { Message = "Hello World" });
```
---
### 🧪 建议测试点:
- 订阅多个相同类型的 Handler,验证是否都能收到事件。
- 发布不同类型事件时,确保只触发对应类型的 Handler。
- 在多线程环境中并发订阅和发布,检查线程安全性。
- 测试取消订阅后是否不再响应事件。
---
如需参考答案或完整实现思路,我也可以提供。是否现在就需要?
除特别声明,本站所有文章均为原创,如需转载请以超级链接形式注明出处:SmartCat's Blog
标签:AI写作
上一篇:无
精华推荐