Young87

SmartCat's Blog

So happy to code my life!

游戏开发交流QQ群号60398951

当前位置:首页 >AI写作

c#题例-2025-06-30 06:32:34

当然可以!以下是一道**专家级别**的 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, Func>)` 条件性添加异步处理。
4. 支持 `.OnError(Action)` 设置全局异常处理器。
5. 支持 `.RunAsync(T input)` 异步启动整个流程并返回最终结果 `Task`。
6. 所有中间处理都应在前一步完成后依次执行(串行)。
7. 若未设置 `.OnError` 并发生异常,应向外抛出。

---

### ✅ 考察点解析:

| 技术点 | 考察内容 |
|--------|-----------|
| 泛型编程 | `PipelineBuilder` 类的设计 |
| 委托与Func | 使用多种委托形式组合处理逻辑 |
| 异步编程 | 使用 `async/await` 和 `Task` 处理异步流程控制 |
| 链式调用 | 构造流畅的 API 接口风格 |
| 管道模式 | 实现数据流逐层处理机制 |
| 异常处理 | 统一错误捕获与传播机制 |
| 闭包与状态管理 | 在每个步骤之间传递和更新上下文 |

---

### 💡 提示:

你可以通过内部维护一个 `List>>` 类型的处理链,在每次调用 `.Then*` 方法时向链中添加新的节点。在 `RunAsync` 中遍历这些节点,依次应用到输入值上。注意异常处理的中断机制和回调绑定。

---

### 🚀 进阶挑战(加分项):

- 添加 `.Finally(Func` 或 `.Finally(Action)` 在最后统一处理结果(无论成功或失败)
- 支持取消令牌 `CancellationToken`
- 支持分支逻辑 `.ThenSwitch(Func, Dictionary>> branches)`
- 支持并发并行步骤 `.Parallel(params Func>[])`

---

如果你需要这道题目的参考实现或者测试用例,我也可以提供。是否要我继续给出完整实现?

除特别声明,本站所有文章均为原创,如需转载请以超级链接形式注明出处:SmartCat's Blog

上一篇: c#题例-2025-06-30 13:19:44

下一篇: c#题例-2025-06-30 00:59:07

精华推荐