пожалуйста, проверьте мой код ниже:случайное число в многопоточной не работает
Public Class tier1
Dim rnd As New System.Random()
Function build1(ByVal dt As DataTable) As String
Try
For i = 0 To 4
For ix As Integer = 0 To till Step 4
lstrn.Add(rnd.Next(ix, ix + 4))
Next
Dim cntx As Integer = 0
For Each x As Integer In lstrn
If (i = 0) Then
If (article(x).Split(ChrW(10)).Length > 2) Then
If (article(x).Split(ChrW(10))(0).Length > 300) Then
first.Add(article(x).Split(ChrW(10))(0))
cntx = cntx + 1
If (cntx = 25) Then
Exit For
End If
End If
End If
End If
lstrn.Clear()
Next
Dim fi as String = "{"
For dx As Integer = 0 To first.Count - 2
fi = fi & w.spinl(first(dx), "light") & "|"
Next
fi = fi & "}"
Return fi
Catch ex As Exception
End Try
End Function
End Class
Теперь посмотрим мой телефонный код:
Dim w As WaitCallback = New WaitCallback(AddressOf beginscn)
For var As Integer = 1 To NumericUpDown1.Value
Dim param(1) As Object
param(0) = lst
param(1) = var
ThreadPool.QueueUserWorkItem(w, param)
Next
sub
sub beginscn()
Dim scntxt As String = t1.buildtier1(dt)
end sub
Теперь я понимаю, что дать и то, что я хочу. Предположим, я передать DataTable так:
1,abcd,34,5
2,adfg,34,5
3,fhjrt,34,5
4,rtitk,34,5
Что я хочу {ABCD | ADFG | fhjrt | rtitk} и эта последовательность должна быть случайным каждый раз. Поскольку я передаю как 50-100 значений и цикл выхода на 25, каждый вывод должен иметь разную последовательность из 25 строк в формате {|}, но это не работает. Каждый раз я получаю такую же последовательность.
Может ли кто-нибудь объяснить, почему он делает это и любое возможное решение этой проблемы?
Примечание: Я уже пробовал перетасовывать данные непосредственно перед очередью, но все равно это не работает.
Это трудно понять, что вы пытаетесь сделать –
Я не программист VB.net, но я подозреваю, что вы не устанавливая случайное число семян к чему-то, как текущее время в миллисекундах. В компьютерах нет таких вещей, как действительно случайные числа, поэтому вместо этого это математическая функция, которая дает последовательность несвязанных чисел, начиная с этого семени. Если вы не установите семя, то оно будет по умолчанию установленным числом, поэтому каждый раз вы получите одну и ту же последовательность. – sradforth
Не забывайте, что случайный не является потокобезопасным. Поместите замок вокруг него. –