什么都不做的异步方法

Fab*_*ini 12 .net c# asynchronous task async-await

我有一个IAnimation暴露方法的接口BeginAsync().该方法应该启动动画并在完成时返回.

我想要做的是实现一个只在执行时返回的null动画类.NoAnimationBeginAsync()

这是正确的实施吗?

public async Task BeginAsync()
{
    await Task.Run(() => { });
}
Run Code Online (Sandbox Code Playgroud)

我怀疑有一种比这更优雅的方法.我还考虑过创建一个空方法.但这给了我一个我不喜欢的警告.

Ree*_*sey 24

只需用于Task.CompletedTask返回已完成的任务:

public Task BeginAsync()
{
     return Task.CompletedTask;
}
Run Code Online (Sandbox Code Playgroud)

如果你有一个Task<TResult>使用Task.FromResult<TResult>一个结果返回一个完成的任务:

public Task<bool> BeginAsync()
{
     return Task.FromResult(true);
}
Run Code Online (Sandbox Code Playgroud)

您当前的实现非常低效,因为它构建状态机,并且还使用ThreadPool线程来运行空任务.

  • 第一个方法应该是:`await Task.CompletedTask;`。第二种方法应该是“return wait Task.FromResult(true);”此外,它们还需要异步密钥。请修复您的代码 (3认同)
  • @GianpieroCaretti不,这是绝对不好的建议.在不需要时使用`await`会增加零利益和额外开销.我所拥有的是正确的. (2认同)
  • @coolbreeze `Task.CompletedTask` 和 `Task.FromResult` 都已经是一个衬垫了......? (2认同)