c#题例-2025-07-02 23:18:28
日期: 2025-07-02 分类: AI写作 69次阅读
当然可以!下面是一道**专家级别**的 C# 逻辑面试题,考察的是对 **泛型、委托、闭包、异步编程和函数式编程思想** 的综合理解与应用能力。
---
### 🧠 面试题:实现一个通用的“重试执行器”(RetryExecutor)
#### 背景:
在实际开发中,我们经常需要对某些可能失败的操作进行重试,比如网络请求、数据库访问等。你需要设计并实现一个高度可复用、线程安全、支持同步和异步操作的通用重试执行器。
---
### ✅ 题目要求:
请使用 C# 实现一个名为 `RetryExecutor` 的类或结构体,满足以下功能:
1. 提供一个方法 `Execute(Func
2. 支持配置最大重试次数,默认为 3 次。
3. 支持设置每次重试之间的延迟时间(如指数退避)。
4. 支持同步和异步版本的方法:
- `T Execute(Func
- `Task
5. 支持传入自定义的异常过滤条件(例如只重试特定异常)。
6. 不允许在重试过程中产生副作用(即如果 `Func
7. 写出使用示例。
---
### 💡 示例代码框架(你可以补充完整):
```csharp
public class RetryExecutor
{
private int _maxRetries;
private TimeSpan _delay;
private Func
public RetryExecutor(int maxRetries = 3, TimeSpan? delay = null)
{
_maxRetries = maxRetries;
_delay = delay ?? TimeSpan.Zero;
_shouldRetry = ex => true; // 默认所有异常都重试
}
public RetryExecutor ShouldRetryOn(Func
{
_shouldRetry = predicate;
return this;
}
public T Execute
{
// TODO: 实现同步版本
}
public async Task
{
// TODO: 实现异步版本
}
}
```
---
### 📌 使用示例:
```csharp
var executor = new RetryExecutor(maxRetries: 5, TimeSpan.FromSeconds(1))
.ShouldRetryOn(ex => ex is IOException || ex is TimeoutException);
int result = executor.Execute(() =>
{
// 可能失败的同步操作
return SomeFlakyOperation();
});
var asyncResult = await executor.ExecuteAsync(async () =>
{
return await SomeFlakyNetworkCallAsync();
});
```
---
### 🎯 考察点总结:
- 对 C# 委托和泛型的掌握程度。
- 异常处理与控制流设计。
- 对 `async/await` 和任务调度的理解。
- 线程安全性考虑(是否共享状态?如何避免?)。
- 函数式编程风格的应用(谓词传递)。
- 设计模式:策略模式、模板方法等。
---
如果你希望我提供参考答案或讲解思路,也可以告诉我 😄
除特别声明,本站所有文章均为原创,如需转载请以超级链接形式注明出处:SmartCat's Blog
标签:AI写作
精华推荐