gpt4 book ai didi

.net - 使任务成为孤儿有什么缺点吗?

转载 作者:行者123 更新时间:2023-12-04 21:28:27 24 4
gpt4 key购买 nike

当我们的应用程序正在从数据库或 http 请求中读取一些数据并且用户点击取消按钮时,我希望能够立即取消从数据库或 http 请求中读取。这两个调用都不能立即取消,即使对于调用的异步版本也是如此。

如果我将代码设置为在下一个数据库/http 调用完成后立即结束任务怎么办?然后忘记那个任务并继续在我的应用程序中?我可以看到的一个缺点是如果在用户存在应用程序之前任务没有完成。

更新:
JPVenson 为 http 和 ADO.NET 提供了一个很好的解决方案。但是,我们有时也会调用 Salesforce API,据我所知,它没有取消机制。所以这个问题仍然存在。

在取消时,我不需要返回的内容,因此从我的应用程序的角度来看,我可以忘记任务。这样做有什么缺点吗?

最佳答案

你会如何“杀死”一个任务? AFAIK 你只能“杀死”线程而不是任务,因为它们没有这样的机制。

使用标准 TaskScheduler 时,任务将作为 ThreadPoolItem 入队。并且在您停止应用程序的情况下,所有 ThreadPool 线程都将被终止,包括所有等待/仍在运行的任务。

对于标题:这确实取决于任务的类型,但总的来说,您总是希望至少出于日志记录的目的观察任何任务的结果。如果您不观察并处理任务引发的潜在异常,则您的应用程序可能会面临“损坏状态”的风险,其中任务可能会以您之前未预料到的方式崩溃,从而更改您的应用程序中的数据有道理。

所以是的,强烈建议您至少处理所有任务以进行日志记录和纠错/观察。

取消 HTTP 调用:WebClient: how to cancel a long running HTTP request?

对于取消 SQL 命令:这是另一种方式,在很大程度上取决于您使用的 ORM
- 英孚 Cancelling an Entity Framework Query
- Ado.Net https://docs.microsoft.com/en-us/dotnet/api/system.data.sqlclient.sqlcommand.cancel?view=netframework-4.8

关于.net - 使任务成为孤儿有什么缺点吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59549554/

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