这是情况。运行VS2012,代码在VB.NET中,框架是4.0。我有一个构建报告的程序。它为大约50,000个不同的客户对sql数据库进行了各种查询,因此线性运行程序,服务器上大约需要17个小时,如果我尝试通过调试执行此操作大约需要36个小时。我试图把它减少到我们可以运行一夜的东西,并且想要使用线程。
在main_load中调用了4个主要子程序,同时生成4个单独的文件。虽然它们确实引用了相同的数据库,但它只是select语句,所以我应该可以同时运行它们,对吧?所以我把4个子程序调用改为了......
Imports System.Data.OleDb
Imports System.Data.SqlClient
Imports System.IO
Imports CDDReports.RiskRatings
Imports System.Threading
Public Class Main
Private Sub Main_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim trd1, trd2, trd3, trd4 As Thread
trd1 = New Thread(AddressOf RunRiskRatedBusinessReport)
trd2 = New Thread(AddressOf RunRiskRatedConsumerReport)
trd3 = New Thread(AddressOf RunRatingVarianceBusinessReport)
trd4 = New Thread(AddressOf RunRatingVarianceConsumerReport)
trd1.Start()
trd2.Start()
trd3.Start()
trd4.Start()
End Sub
//subroutines defined
end class
但是当我运行该程序时,现在没有任何反应。偶尔会创建一个或两个文件(每个子例程的前几行创建文件)所以看起来可能正在启动它们?但随后他们立即退出,任务调度员说这个过程已经完成......但是没有任何东西被运行。如果这些线程没有启动或者几乎立即结束,我做错了什么?
更新:我已经为整个子程序添加了一个try catch,所以如果它们因任何原因失败,它应该发送一封电子邮件......同样的事情发生:进程启动并立即完成,没有发送电子邮件。我还添加了下面的代码,但没有任何变化。如果主要没有,线程是否会有权限问题?
While trd4.ThreadState = ThreadState.Running
While trd3.ThreadState = ThreadState.Running
While trd2.ThreadState = ThreadState.Running
While trd1.ThreadState = ThreadState.Running
Thread.Sleep(10000)
End While
End While
End While
End While