标记为异步的功能是否有任何副作用,但实际上并未进行任何等待调用?例如:
public interface IMyInterface
{
Task DoSomethingAsync();
}
public class DoSomething1:IMyInterface
{
public async Task DoSomethingAsync()
{
await getSomethingFromDatabaseAsync();
}
}
public class DoSomething2:IMyInterface
{
public async Task DoSomethingAsync()
{
doSomethingElse();
}
}
Run Code Online (Sandbox Code Playgroud)
IMyInterface由许多类实现,但是对于其中一个类,没有等待调用。这会引起任何问题吗?
如果您有一个返回任务的接口方法并且没有等待(是的,它发生了)。只需删除async关键字并返回Task.CompletedTask
该Task.CompletedTask属性返回其Status属性设置为的任务RanToCompletion。
获取已成功完成的任务。
public class DoSomething2:IMyInterface
{
public Task DoSomethingAsync()
{
doSomethingElse();
return Task.CompletedTask;
}
}
Run Code Online (Sandbox Code Playgroud)
是的,有副作用,编译器正在检查IAsyncStateMachine并产生更多的IL,此外,将来的开发人员将用ire查看您的代码。至于其他功能上的区别,我想不到任何方便的地方。
| 归档时间: |
|
| 查看次数: |
132 次 |
| 最近记录: |