Как запустить несколько операций параллельно в .net?

У меня есть приложение, которое запускается слишком долго, и я хочу представить многопоточность / распараллеливание / что угодно.

В частности, код получает несколько тысяч писем, а затем отправляет их. Сегодня код выглядит следующим образом (немного упрощен):

Dim mails = centreInteretService.GetEmails()
For Each m in mails
    m.Body = GetMailContent(m)
    If MailSendable(m) Then
        SendMail(m)
    End If
Next

Я хочу попробовать отправить несколько писем параллельно. Я хотел бы попробовать с двумя параллельными потоками. В частности, я хотел бы поместить весь цикл в поток (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) выдают мне ошибку: нет подходящей функции x соответствующий делегат System.Threading.ParameterizedThreadStart .

Я пробовал искать здесь и там, но могу найти только те решения, которые требуют гораздо больше знаний, чем то, что у меня есть; или основы работы с потоками; или .NET 4, но мы все еще находимся в .NET 3.5 ...

У вас есть простое решение, которое я мог бы попробовать?

Спасибо

5
задан thomasb 2 January 2012 в 13:53
поделиться