You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

子类无需父类异步virtual Task方法逻辑,如何优雅重写?

重写异步virtual方法的优雅实现方式

你有一个包含异步virtual方法的抽象类,代码如下:

public virtual async Task Response(CancellationToken cancellationToken)
{
    // 原有逻辑
}

子类中不需要保留该方法的原有逻辑,目前的重写方式存在不必要的状态机开销,这里有两种更优雅且高效的实现方式:

  • 方式一:直接返回已完成任务
    去掉async关键字,直接返回Task.CompletedTask,避免async/await生成额外的状态机,减少性能损耗:

    public override Task Response(CancellationToken cancellationToken)
    {
        return Task.CompletedTask;
    }
    
  • 方式二:支持取消令牌的规范实现
    如果需要遵循异步方法的取消约定,在方法开头检查取消令牌,确保调用方发起取消时能正确抛出异常:

    public override Task Response(CancellationToken cancellationToken)
    {
        cancellationToken.ThrowIfCancellationRequested();
        return Task.CompletedTask;
    }
    

如果父类的异步方法是带返回值的Task<T>类型,只需将返回值替换为Task.FromResult(default(T))即可,比如返回字符串类型时可以写return Task.FromResult(string.Empty);。

内容的提问来源于stack exchange,提问作者TryHard

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 16:40:56