总结任务中返回的小数

时间:2015-04-29 20:09:29

标签: vb.net task wait

我试图浏览一个1-X项目列表并在任务中处理它们以加快处理的完成(它们会产生有时需要很短时间完成的Web请求)。我试图总结处理完成时返回的小数,而不是第二次循环遍历列表。就像现在一样,总和被每个任务覆盖而不是被添加到。

我可以在将总和添加到总和之前插入一个短暂的暂停,这似乎工作正常,但我确信有更好的解决方案。

我已经看过提及SyncLock,但我无法在Decimal上使用它。

这是我为测试编写的一些代码。 .Process方法只是等待一个随机的秒数,并将.Value属性设置为随机小数。

有任何改进建议并以适当的方式计算总和吗?

    Try
        Dim lstItem As List(Of clsItem) = GetList()
        Dim lstViewItem As New List(Of ListViewItem)
        Dim lstTasks As New List(Of Task)()
        Dim decTotal As Decimal = 0.0
        For i As Int32 = 0 To lstItem.Count - 1
            Dim j As Int32 = i
            Dim t As Task = Task.Run(Sub()
                                         lstViewItem.Add(New ListViewItem(New String() {j, lstItem(j).Process()}))
                                         'System.Threading.Thread.Sleep(j * 1000)
                                         decTotal += lstItem(j).Value
                                     End Sub)
            lstTasks.Add(t)
        Next
        Task.WaitAll(lstTasks.ToArray())
        lstView.Items.AddRange(lstViewItem.ToArray())
        lstView.Items.Add("")
        lstView.Items.Add(decTotal)
    Catch ex As Exception
        Debug.WriteLine(ex.Message)
    End Try

0 个答案:

没有答案