|
分類:[.NET 全般]
以下のコードを実行すると、
ans1とans2に同じ8.0が代入されます。
一方で、
'Thread.Sleep(1)
このコメントアウトを外してやると
ans1には4.0、ans2には8.0が代入されます。
つまり、これは、
MultiTask1で変数を別のスレッドに投げきっていない状態で
temp2.X = 4
と値を書き換えたためだと思います。
このようなことを回避するためには、
Sleepで少し待ってやるか
クラスを新規作成して別のものを用いるしかないでしょうか?
Imports System.Threading.Tasks
Imports System.Threading
Module Module1
Private Class test
Property X As Single
End Class
Sub XYZR()
Dim ques1 As New test
ques1.X = 10
Dim temp1 As test = ques1
temp1.X = 2
Dim MultiTask1 = New Task(Of Single)(AddressOf func, temp1)
MultiTask1.Start()
'Thread.Sleep(1)
Dim temp2 As test = ques1
temp2.X = 4
Dim MultiTask2 = New Task(Of Single)(AddressOf func, temp2)
MultiTask2.Start()
MultiTask1.Wait()
Dim ans1 As Single = MultiTask1.Result
MultiTask2.Wait()
Dim ans2 As Single = MultiTask2.Result
End Sub
Private Function func(ByVal g As test) As Single
Return g.X * 2
End Function
End Module
|