我有一个接口I,它在以下两个地方实现:
interface I
{
Task DoSomething();
}
该接口具有异步任务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
}
这编译,但我不确定它有多正确,做一些类似的事情,旁边的事实,方法是没有用的。
但是在这种情况下“无用”是可以的,因为它的实现仅仅是因为它是实现接口I的类B所需要的。
我想知道这是否是实现一个返回异步任务但没有await或Return的方法的正确方法?我知道这个方法将简单地不做任何事情并同步执行,因为没有等待的调用。
更新:类似的问题已经被问到这里,在问这个之前我已经检查了所有的问题。但是没有人问我在问什么
public Task DoSomething()
{
return Task.CompletedTask;
}
不需要
null
public Task DoSomething()
{
return Task.FromResult(0);
}
如果您发现需要返回一个结果,但仍然不需要
public Task<Result> DoSomething()
{
return Task.FromResult(new Result())
}
或者,如果您确实想使用异步(不推荐);
public async Task<Result> DoSomething()
{
return new Result();
}
我看到大多数人倾向于省略
请考虑以下示例
static async Task Main(string[] args)
{
Task task = test(); // Will throw exception here
await task;
Task taskAsync = testWithAsync();
await taskAsync; // Will throw exception here
}
static Task test()
{
throw new Exception();
return Task.CompletedTask; //Unreachable, but left in for the example
}
static async Task testWithAsync()
{
throw new Exception();
}
使用
可能导致意想不到的行为。
因此,我更喜欢