gpt4 book ai didi

c# - 你必须等待异步方法吗?

转载 作者:太空狗 更新时间:2023-10-29 21:21:53 25 4
gpt4 key购买 nike

假设您有一个服务 API 调用。被调用方在某种程度上对性能很关键,因此为了不让 API 调用延迟超过必要的时间,使用了 SaveAsync() 方法。但是,我不能await,因为这会比非异步版本占用 API 调用更长的时间(甚至可能更长)。

我问的原因是:如果您 await 调用,Task 对象是否有可能返回收集垃圾?如果是这样,是否会中断正在运行的任务?

最佳答案

The reason I'm asking is this: If you don't await the call, is there a chance the Task object returned gets garbage collected?

一般来说,不,那不应该发生。对任务进行排队的底层 TaskScheduler 通常会在所需的生命周期内保留对它的引用,直到它完成。您可以在 TaskScheduler.QueueTask 的文档中看到:

A typical implementation would store the task in an internal data structure, which would be serviced by threads that would execute those tasks at some time in the future.

您真正的问题将出在 ASP.NET SynchronizationContext 上,它会在运行时跟踪任何正在进行的异步操作。如果您的 Controller 操作在异步操作之前完成,您将得到一个异常。

如果您想在 ASP.NET 中执行“即发即弃”操作,您应该确保通过 HostingEnvironment.QueueBackgroundWorkItem 向 ASP.NET 运行时注册它们。或 BackgroundTaskManager

关于c# - 你必须等待异步方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32785134/

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