c#题例-2025-06-30 06:32:34
日期: 2025-06-30 分类: AI写作 16次阅读
当然可以!以下是一道**专家级别**的 C# 程序员逻辑面试题,它融合了 **泛型、委托、闭包、异步编程模型(TPL)以及设计模式** 的理解,考察候选人对语言特性的深入掌握和综合运用能力。
---
### 🧠 面试题:实现一个可链式调用的“任务管道”调度器
#### 背景描述:
你正在开发一个异步处理系统,需要构建一个灵活的任务管道(Pipeline),能够按顺序执行多个异步操作,并支持在每一步中添加前置条件判断、异常处理和后置处理逻辑。这个系统应具备高度可扩展性和可重用性。
#### 任务要求:
请使用 C# 实现一个名为 `PipelineBuilder
```csharp
var result = await new PipelineBuilder
.Then(async x => x + 1)
.ThenIf(x => x > 5, async x => x * 2)
.Then(x => x * 3)
.OnError(ex => Console.WriteLine("Error occurred: " + ex.Message))
.RunAsync(10);
```
上面的代码应该输出最终结果为 `36`,因为:
- 初始值是 `10`
- 第一步加 1 → `11`
- 因为 `11 > 5`,所以乘以 2 → `22`
- 后续同步乘以 3 → `66`
- 输出 `66`
> 注意:`.ThenIf()` 是一个可选步骤,只有当提供的谓词返回 true 时才执行对应的操作。
如果某个步骤抛出异常,则跳过后续所有 `.Then*` 步骤,并进入 `.OnError()` 指定的错误处理器(如果有)。
#### 功能点要求:
1. 支持 `.Then(Func
2. 支持 `.Then(Func
3. 支持 `.ThenIf(Func
4. 支持 `.OnError(Action
5. 支持 `.RunAsync(T input)` 异步启动整个流程并返回最终结果 `Task
6. 所有中间处理都应在前一步完成后依次执行(串行)。
7. 若未设置 `.OnError` 并发生异常,应向外抛出。
---
### ✅ 考察点解析:
| 技术点 | 考察内容 |
|--------|-----------|
| 泛型编程 | `PipelineBuilder
| 委托与Func | 使用多种委托形式组合处理逻辑 |
| 异步编程 | 使用 `async/await` 和 `Task
| 链式调用 | 构造流畅的 API 接口风格 |
| 管道模式 | 实现数据流逐层处理机制 |
| 异常处理 | 统一错误捕获与传播机制 |
| 闭包与状态管理 | 在每个步骤之间传递和更新上下文 |
---
### 💡 提示:
你可以通过内部维护一个 `List
---
### 🚀 进阶挑战(加分项):
- 添加 `.Finally(Func
- 支持取消令牌 `CancellationToken`
- 支持分支逻辑 `.ThenSwitch(Func
- 支持并发并行步骤 `.Parallel(params Func
---
如果你需要这道题目的参考实现或者测试用例,我也可以提供。是否要我继续给出完整实现?
除特别声明,本站所有文章均为原创,如需转载请以超级链接形式注明出处:SmartCat's Blog
标签:AI写作
精华推荐