У меня есть приложение, которое слишком долго запускается, и я хочу ввести многопоточность / распараллеливание / что угодно.
В частности, код получает несколько тысяч писем, а затем отправляет их. Сегодня код выглядит так (немного упрощенно):
Dim mails = centreInteretService.GetEmails()
For Each m in mails
m.Body = GetMailContent(m)
If MailSendable(m) Then
SendMail(m)
End If
Next
Я хочу попробовать отправить несколько писем параллельно. Я хотел бы попробовать с 2 потоками параллельно. Более конкретно, я бы хотел поместить весь цикл в поток (getmailcontent + sendmail).
Я думал о чем-то вроде этого:
Dim mails1 As New List(Of MailSerialiserCI)
Dim mails2 As New List(Of MailSerialiserCI)
Dim nbFirstList As Integer = CInt(Math.Ceiling(nbTotal / 2))
mails1 = mails.Take(nbFirstList)
mails2 = mails.Skip(nbFirstList)
Dim smt1 As New MailSender.MailSenderThreaded()
smt1.mails = mails1
smt1.nbTotal = nbTotal
Dim threadMails1 As ThreadStart = New ThreadStart(AddressOf smt1.SendMails)
Dim th1 As Thread = New Thread(AddressOf threadMails1)
th1.Start()
Dim smt2 As New MailSender.MailSenderThreaded()
smt2.mails = mails2
smt2.nbTotal = nbTotal
Dim threadMails2 As ThreadStart = New ThreadStart(AddressOf smt2.SendMails)
Dim th2 As Thread = New Thread(AddressOf threadMails2)
th2.Start()
И MailSenderThreaded выглядит так:
Public Class MailSenderThreaded
Public mails As List(Of MailSerialiserCI)
Public nbTotal As Integer
Public Sub SendMails()
LoopMails(Me.mails, Me.nbTotal)
End Sub
End Class
Но строки с New Thread(AdressOf x)
дают мне ошибку: no applicable function x matching delegate System.Threading.ParameterizedThreadStart
.
Я пытался искать здесь и там, но я могу найти только те решения, которые требуют гораздо больше знаний, чем у меня; или основы потоков; или .NET 4, но мы все еще находимся в .NET 3.5 ...
У вас есть простое решение, которое я мог бы попробовать?
Спасибо