将Task变成孤儿有什么缺点吗?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将Task变成孤儿有什么缺点吗?相关的知识,希望对你有一定的参考价值。
当我们的应用程序正在从其中任一数据库读取某些数据并且用户点击了“取消”按钮时,我希望能够立即取消从数据库或http请求的读取。即使对于异步版本的呼叫,这两个呼叫都不能立即取消。
如果我设置代码以在下一个数据库/ http调用完成后立即结束任务,该怎么办?然后忘记该任务并继续在我的应用程序中继续吗?我可以看到的一个缺点是任务是否在用户存在应用程序之前没有完成。
更新:JPVenson为针对http和ADO.NET的这项权利提供了一个很好的解决方案。但是,有时我们也会调用Salesforce API,据我所知,它没有取消机制。因此问题仍然存在。
取消后,我不需要返回任何内容,因此从我的应用程序的角度来看,我很好地忘记了该任务。是否有这样做的缺点?
您将如何“杀死”任务? AFAIK,您只能“杀死”线程,而不能杀死任务,因为它们没有这种机制。
[使用标准TaskScheduler时,任务将被列为ThreadPoolItem,并且在您停止应用程序的情况下,所有这些ThreadPool线程将被杀死,包括所有仍在运行/仍在运行的Tasks。
对于标题:它确实取决于任务的类型,但是通常来说,您总是希望至少出于记录目的观察任何任务的结果。如果您没有观察到并处理任务引发的潜在异常,则可能会冒着应用程序“损坏状态”的风险,在该状态下,任务可能会以您以前无法预期的方式崩溃,从而更改应用程序中不会有道理。
因此,强烈建议您至少处理所有任务以进行日志记录和纠错/观察。
用于取消HTTP呼叫:WebClient: how to cancel a long running HTTP request?
用于取消SQL命令:这是另一种方式,在很大程度上取决于您使用的ORM-EFCancelling an Entity Framework Query-Ado.Net https://docs.microsoft.com/en-us/dotnet/api/system.data.sqlclient.sqlcommand.cancel?view=netframework-4.8
以上是关于将Task变成孤儿有什么缺点吗?的主要内容,如果未能解决你的问题,请参考以下文章