.net - 后台 worker 或线程池

标签 .net vb.net multithreading

我正在尝试创建一个应用程序,该应用程序允许发生多个搜索请求,同时保持使用用户界面以允许交互。对于多个搜索请求,我最初只运行一个搜索请求,但用户交互仍然可以通过使用后台工作人员来执行此操作。现在我需要通过允许更多搜索功能来扩展这些功能,并且基本上只是将它们排队。我不确定是使用多个后台 worker 还是使用线程池,因为我希望能够随时了解每个搜索作业的进度。

如果我使用线程池,我要做的就是将其添加到循环中,每次发出搜索请求时都会调用该循环

 ThreadPool.QueueUserWorkItem(AddressOf Search)

但是如果使用backgroundworkers,这是我知道的唯一方法,而且我不知道如何将它们添加到任何东西,但也许是一个数组列表,我可以从每个bgw调用reportprogress。

编辑:

例如,这是我当前的代码

 For Each Thread In ThreadList
                    'Thread.Sleep(500)
                    SyncLock Me

                        If searchChoice = "google" Or fromUrl.Contains("google") Then
                            links = parsingUtilities.GetGoogleLinksFromHtml(fromUrl, html, searchItem)
                            posts = parsingUtilities.GetPostLinksFromHtml(links)
                            If links.Count = 0 Then
                                Exit Sub
                            End If
                            Exit For
           .....

所以在上面的代码中,链接和帖子是我用来获取我需要的网址的数组列表,它们用于不同的搜索选择,我最初在链接和帖子上有同步锁,但其他人告诉我改用同步锁。因此,从您的角度来看,我应该为每个搜索控件分配一个单独的数据控件,并在足够的时间后锁定适当的数据控件并将其传输以进行写入。 谢谢

最佳答案

我通常不理会线程池。它是一个进程范围的资源,可以配置为不同的大小,尤其是在 Web 应用程序中。但是,由于您的应用程序听起来像客户端表单应用程序,因此您不会与任何其他应用程序共享线程池,并且您可以根据需要对其进行配置。

您的用例比大多数用例更适合线程池,但这样做并没有太大的优势。

关于.net - 后台 worker 或线程池,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2789655/

相关文章:

.net - 覆盖 GetHashCode 的最佳算法是什么?

.NET 数据库迁移工具

c# - Blazor 将数据从父级传递给子级

vb.net - 折叠没有区域的选择案例?

c++ - 需要对条件变量寻求的互斥保护(原子)赋值吗?

Java 并发 : Alternative to Multi Threading (working with non thread safe environment)

c# - 仅显示一次 C# 消息

vb.net - 修剪图像(裁剪以删除所有空白区域)

java - 死锁是按方法还是按类发生?

vb.net - 如何找到多维数组的最小值和最大值?