c#题例-2025-07-02 23:18:28
日期: 2025-07-02 分类: AI写作 107次阅读
当然可以!下面是一道**专家级别**的 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写作
精华推荐

