没有等待或返回的 C# 异步任务方法

标签 c# async-await task

我有一个在两个地方实现的接口(interface) I,例如:

interface I 
{ 
   Task DoSomething();
}

该接口(interface)具有异步任务 DoSomething 方法 API,然后在类 A 中实现,例如:

class A : I {....}

class B : I {....}

在类A中,DoSomething的实现如下,没问题:

public async Task DoSomething()
{
    if (...)
    {
        await DoIt();
    }
}

但是,在类 B 中,DoSomething() 的实现不应执行任何操作。 所以,它的实现看起来像这样:

public async Task DoSomething()
{
    // nothing
}

这可以编译,但除了该方法无用之外,我不确定做这样的事情有多正确。

但是在这种情况下“无用”是可以的,因为它的实现只是因为实现接口(interface) I 的类 B 需要它。

我想知道这是否是实现返回异步任务但没有等待或返回的方法的正确方法?我知道此方法将简单地不执行任何操作并同步执行,因为没有对 await 的调用。

更新:在 SO 上也有人问过类似的问题,在问这个问题之前我已经检查了所有这些问题。没有人在问我在问什么

最佳答案

public Task DoSomething()
{
    return Task.CompletedTask;
}

不需要 async

如果您使用的是旧版本的 .NET,请使用:

public Task DoSomething()
{
    return Task.FromResult(0);
}

如果你发现你需要返回一个结果但你仍然不需要await任何东西,试试;

public Task<Result> DoSomething()
{
    return Task.FromResult(new Result())
}

或者,如果你真的想使用异步(不推荐);

public async Task<Result> DoSomething()
{
    return new Result();
}

关于没有等待或返回的 C# 异步任务方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47187544/

相关文章:

c# - 将游戏对象动态添加到 Unity3d 中的场景

android - 已安装 GnuPG,但来自 gradle 任务的 "command not found"

c# - System.Threading.ExecutionContext 未实现接口(interface) System.IDisposable

android - 如何在不同的 Activity 调用上执行不同的功能?

c# - ASP.NET N-Layered/DDD 架构和 Window 服务软件架构之间有区别吗?

c# - 检查数组中的多个元素是否包含相同的值

c# - Cell by Cell写的很慢,但是我遇到了range写的情况

javascript - 如何在 typescript next.js 中使用顶级 "await"

Javascript顺序打印到文件

c# - 尝试创建 Assets 时出现 System.NotSupportedException