と である多くのプロパティを持つクラスがInteger
ありSingle
ます。プロパティをアキュムレータとして使用できるように、クラスをマルチスレッドで使用したいと考えています (クラスはレポート スキームの基盤です)。だから私はこのようなことをしたいと思います:
Public Class ReportTotals
Property Count As Integer
Property Total As Single
Property Tax As Single
Property Shipping As Single
Property ItemsSold As Integer
Public Function GetReport() As String
...
End Function
End Class
Public Function BuildReportData As ReportTotals
Dim myReport As New ReportTotals
With myReport
Parallel.ForEach(UserSales, Sub(userSale)
.Count += 1
.Total += userSale.Total
.Tax += userSale.Tax
.Shipping += userSale.Shipping
.ItemsSold += userSale.ItemsSold
'more complicated stuff and property assignments
End Sub)
End With
End Function
私の調査に基づいて、Integer
とSingle
がアトミックであることはわかっていますが、それがクラスの一部である整数にまで及ぶかどうかはわかりません。マルチスレッドのバグが後で発生し、私を噛む可能性があるため、想定したくありません。
更新:どうやら、Single
スレッドセーフではないので、そのロックを使用する必要がありますが、どうInteger
ですか?