Просто думаю о том, как я могу попытаться провести более быстрый поиск. Я мог бы создать пару фоновых рабочих, а затем перебрать от 0 до allTracks.count - 1 в одном из рабочих, а затем в другом, перебрать из allTracks.count - от 1 до 0. Затем, в зависимости от того, что достигнуто первым, на событие RunWorkerCompleted, вы можете отменить асинхронную на другом работнике. Это потенциально может сократить время поиска вдвое.
Вы также можете запускать циклы в четверти списка одновременно, поделив (count -1) на 4 на 25%, а затем вы можете вычесть его из (count-1) на 75%, а затем выполнить итерацию вверх или вниз на полпути в другой паре асинхронных рабочих. Это может существенно сократить время поиска до 25% от предыдущего ожидания.
Я вижу, что вы создаете класс для поддержки поиска в объекте, и я не знаю, действительно ли фоновые работники функционируют внутри классов, так что я могу быть далеко.
Просто идея. Я не делал ничего подобного раньше, поэтому я могу сделать это намного сложнее, чем нужно. Удачи! Дайте мне знать, что вы узнаете.
Редактировать: Если вы работаете с фоновым рабочим, я думаю, вам нужно будет включить этот код в цикл for:
If BackgroundWorker1.CancellationPending Then
Exit For
End If