c#题例-2025-06-25 17:18:37
日期: 2025-06-25 分类: AI写作 8次阅读
当然可以!下面是一道**专家级别**的 C# 程序员逻辑面试题,它融合了委托、泛型、闭包、异步编程和设计模式的思想,考察候选人对语言机制的理解深度以及代码抽象能力。
---
### 🧠 面试题:实现一个可链式调用的异步工作流引擎(Workflow Engine)
#### **题目描述:**
你需要实现一个简单的**异步可扩展工作流引擎**,支持以下功能:
1. 支持添加多个“步骤”(Step),每个步骤是一个异步函数 `Func
2. 每个步骤可以连接到下一个步骤(链式调用)。
3. 整个工作流可以通过 `.Run(input)` 异步启动,并返回最终结果。
4. 如果某个步骤返回 null 或抛出异常,则整个流程应中止,并返回失败状态或自定义错误信息。
#### **示例使用方式:**
```csharp
var workflow = new WorkflowBuilder
.StartWith(async x =>
{
await Task.Delay(100);
return (x * 2).ToString();
})
.Then(async s =>
{
await Task.Delay(100);
return s + "-processed";
});
var result = await workflow.Run(5); // 应该输出 "10-processed"
```
---
### ✅ 要求:
1. 实现 `WorkflowBuilder
2. 每次调用 `.Then(...)` 接受当前类型并返回新的泛型类型,确保编译期类型安全。
3. 支持错误处理(如中间步骤为 null,或者抛出异常)。
4. 可选加分项:
- 支持分支逻辑(如 `.When(...)` 条件选择不同路径)
- 支持 `.OnError(...)` 自定义错误处理回调
---
### 💡 提示与思路:
- 使用泛型链式构建器模式(Fluent Builder)
- 利用委托链(`Func
- 内部维护一个 `List
- 在 Run 方法中依次执行每个步骤,传递上下文
- 可以考虑引入 `async/await` 和异常捕获来处理失败流程
---
### 📌 示例答案框架(供参考):
```csharp
public class WorkflowBuilder
{
private Func
public WorkflowBuilder
{
_pipeline = func;
return this;
}
public WorkflowBuilder
{
var currentPipeline = _pipeline;
var builder = new WorkflowBuilder
builder._pipeline = async input =>
{
var result = await currentPipeline(input).ConfigureAwait(false);
if (result == null) throw new InvalidOperationException("Previous step returned null.");
return await nextFunc(result).ConfigureAwait(false);
};
return builder;
}
public async Task
{
if (_pipeline == null) throw new InvalidOperationException("No steps defined.");
try
{
return await _pipeline(input).ConfigureAwait(false);
}
catch (Exception ex)
{
Console.WriteLine($"Error in workflow: {ex.Message}");
throw; // or return a Result
}
}
}
```
---
### 🧪 扩展挑战(可选):
- 添加 `.Use(Func
- 添加 `.If(...)` 分支判断
- 支持 `.Finally(...)` 最终统一清理逻辑
---
这道题不仅考验候选人对 C# 委托、泛型、异步的理解,还要求具备良好的架构思维和接口设计能力。适合高级工程师或架构师岗位的面试使用。
需要我提供完整解答或单元测试样例吗?
除特别声明,本站所有文章均为原创,如需转载请以超级链接形式注明出处:SmartCat's Blog
标签:AI写作
精华推荐