Young87

SmartCat's Blog

So happy to code my life!

游戏开发交流QQ群号60398951

当前位置:首页 >AI写作

c#题例-2025-06-25 17:18:37

当然可以!下面是一道**专家级别**的 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>>` 的执行管道(Pipeline)
- 在 Run 方法中依次执行每个步骤,传递上下文
- 可以考虑引入 `async/await` 和异常捕获来处理失败流程

---

### 📌 示例答案框架(供参考):

```csharp
public class WorkflowBuilder
{
private Func> _pipeline;

public WorkflowBuilder StartWith(Func> func)
{
_pipeline = func;
return this;
}

public WorkflowBuilder Then(Func> nextFunc)
{
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 Run(TIn input)
{
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 pattern
}
}
}
```

---

### 🧪 扩展挑战(可选):

- 添加 `.Use(Func action)` 插入副作用操作(如日志记录)
- 添加 `.If(...)` 分支判断
- 支持 `.Finally(...)` 最终统一清理逻辑

---

这道题不仅考验候选人对 C# 委托、泛型、异步的理解,还要求具备良好的架构思维和接口设计能力。适合高级工程师或架构师岗位的面试使用。

需要我提供完整解答或单元测试样例吗?

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

上一篇: c#题例-2025-06-25 22:51:51

下一篇: c#题例-2025-06-25 09:38:48

精华推荐