首页 > 解决方案 > 任务或线程 c#

问题描述

我有两种情况,我不确定是使用任务还是线程(使用 dot net Framework 4.7)

场景一:数据库查询

我有一组使用 SqlCommand 类执行的数据库查询。我需要所有给定的查询并行运行。查询运行时间为 1 分钟到 60 分钟。

在这种情况下什么更好?线程/任务在等待查询完成时实际上是“活动的”吗?

场景 2:解析 XML

我假设列表或数组中有 1000 个 XmlFile 对象。我有一组需要从这 1000 个文件中解析为 DataTable 对象的 XPath 表达式(以便稍后部署到数据库)。最好的情况是并行解析这 1000 个文件中的许多文件。

解析时间不会太长,但肯定会超过几秒钟。我目前使用 Task.Run() 实现了这一点,1000 次大约需要 90 秒,尽管我无法真正监控其中有多少是并行运行的。

是否也有关于何时服用什么的一般规则?

谢谢

标签: c#multithreadingtaskthreadpool

解决方案


Thread 用于在 Windows 中创建和操作线程。

Task 代表一些异步操作,是 Task Parallel Library 的一部分,Task Parallel Library 是一组用于异步和并行运行任务的 API。

考虑到 Task 比线程更抽象,它通常创建在线程池上,被视为后台线程,而默认情况下线程不是后台线程,这可以通过下面两个图中的代码进行验证。

这样,我建议尽可能使用更高级别的抽象。因此,您应该使用任务而不是线程,因为它是在已经系统创建线程的线程池上创建的,以提高性能,您无需担心显式启动/管理自己的线程。

洛杉矶。


推荐阅读