如何创建可正常调用的无操作async异步方法存根?
无操作async异步方法存根实现方案
以下是不同开发场景下的实现方式,均满足不抛异常、无未await警告、无实际执行操作的要求:
C# / .NET 场景
- 无返回值的异步方法存根,直接返回
Task.CompletedTask即可,比空async方法少了状态机开销,性能更优:
// 写法1:省略async修饰符,直接返回预创建的已完成Task public Task EmptyAsyncStub() { return Task.CompletedTask; } // 写法2:保留async修饰符,适合后续要补充实现的场景 public async Task EmptyAsyncStub() { await Task.CompletedTask; }
- 带返回值的泛型异步方法存根,返回
Task.FromResult包裹的默认值即可:
public Task<T> EmptyAsyncStub<T>() { return Task.FromResult<T>(default); }
JavaScript / TypeScript 场景
- 直接返回已完成状态的
Promise.resolve即可:
// 无返回值异步存根 function emptyAsyncStub() { return Promise.resolve(); } // 带返回值异步存根 function emptyAsyncStub() { return Promise.resolve(null); // 可替换为任意需要的默认返回值 }
Python 场景
- 直接定义空的async方法即可,本身就是合法的无操作异步存根:
async def empty_async_stub(): pass
注意事项
上述返回的都是运行时自带的已完成异步对象,不会产生多余开销,调用方无论是否await都不会触发编译器警告,也不会抛出任何未实现异常。
内容的提问来源于stack exchange,提问作者Thomas Phaneuf
相关产品推荐
相关产品推荐

