gpt4 book ai didi

c# - 将函数标记为异步但没有等待调用,有什么问题吗?

转载 作者:行者123 更新时间:2023-11-30 15:14:16 24 4
gpt4 key购买 nike

拥有一个标记为异步但实际上不进行任何等待调用的函数是否有任何副作用?例如:

public interface IMyInterface
{
Task DoSomethingAsync();
}

public class DoSomething1:IMyInterface
{
public async Task DoSomethingAsync()
{
await getSomethingFromDatabaseAsync();
}
}

public class DoSomething2:IMyInterface
{
public async Task DoSomethingAsync()
{
doSomethingElse();
}
}

IMyInterface 由很多类实现,但其中一个类没有await 调用。这会导致任何问题吗?

最佳答案

如果你有一个返回任务的接口(interface)方法并且你没有等待(是的,它发生了)。只需删除 async 关键字并返回 Task.CompletedTask

Task.CompletedTask 属性返回一个任务,其 Status 属性设置为 RanToCompletion

Gets a task that has already completed successfully.

public class DoSomething2:IMyInterface
{
public Task DoSomethingAsync()
{
doSomethingElse();
return Task.CompletedTask;
}
}

是的,有副作用,编译器正在检测 IAsyncStateMachine 并生成更多的IL,此外, future 的开发人员将愤怒 地查看您的代码。至于其他功能上的差异,我想不出任何现成的。

关于c# - 将函数标记为异步但没有等待调用,有什么问题吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55253847/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com