我正在开发一个小文件下载器。它通过分段下载文件,然后并行下载每个分段。我希望我的应用程序支持一个事件系统,理想情况下它会显示已经完成的总进度。
我目前的幼稚方法是简单地锁定数据结构,每次每个线程下载 10k 时,所有线程都在其中存储有关其当前进度的信息。然后我进行计算,然后引发事件。这有一个问题,即线程通常会同时引发一个事件,而且每次我想引发一个事件时,我都会锁定整个结构。另一方面,如果连接变慢,则可能需要一段时间才能引发事件。我更希望有一个每 100 毫秒或某事会引发一个事件的系统。
虽然该解决方案有效,但我对此并不满意。对于所描述的情况,正确的方法是什么?