c# - 任务或线程 c#
问题描述
我有两种情况,我不确定是使用任务还是线程(使用 dot net Framework 4.7)
场景一:数据库查询
我有一组使用 SqlCommand 类执行的数据库查询。我需要所有给定的查询并行运行。查询运行时间为 1 分钟到 60 分钟。
在这种情况下什么更好?线程/任务在等待查询完成时实际上是“活动的”吗?
场景 2:解析 XML
我假设列表或数组中有 1000 个 XmlFile 对象。我有一组需要从这 1000 个文件中解析为 DataTable 对象的 XPath 表达式(以便稍后部署到数据库)。最好的情况是并行解析这 1000 个文件中的许多文件。
解析时间不会太长,但肯定会超过几秒钟。我目前使用 Task.Run() 实现了这一点,1000 次大约需要 90 秒,尽管我无法真正监控其中有多少是并行运行的。
是否也有关于何时服用什么的一般规则?
谢谢
解决方案
Thread 用于在 Windows 中创建和操作线程。
Task 代表一些异步操作,是 Task Parallel Library 的一部分,Task Parallel Library 是一组用于异步和并行运行任务的 API。
考虑到 Task 比线程更抽象,它通常创建在线程池上,被视为后台线程,而默认情况下线程不是后台线程,这可以通过下面两个图中的代码进行验证。
这样,我建议尽可能使用更高级别的抽象。因此,您应该使用任务而不是线程,因为它是在已经系统创建线程的线程池上创建的,以提高性能,您无需担心显式启动/管理自己的线程。
洛杉矶。
推荐阅读
- ibm-watson - 如何让@sys-person 实体获取小写名称?
- swift - 快速显示图像数组的表格视图
- actions-on-google - 报告过期的访问令牌
- python - 将 numpy 数组转换为 dask 数据框列?
- html - 如何通过 id 从 html 字符串中获取元素
- php - 为什么 $_POST 在 codeigniter 中是空的?
- java - 尝试查找菜单项时,应用程序在屏幕旋转时崩溃
- ruby - ArgumentError:缺少必需的选项:key
- unity3d - SetActive(true) 在协程中不起作用
- r - 基于 R 中具有 p 值的多列值创建相关矩阵