когда я должен использовать параллельный foreach и когда я должен использовать параллельный linq? - PullRequest
0 голосов
/ 12 ноября 2018

Я испробовал приведенный ниже код, он работает нормально и производительность тоже хорошая. Но когда я запускаю тестовые случаи nunit, он не работает. У меня нет представления о параллельном linq или параллельном foreach. Возможно ли преобразовать код в параллельный linq .Пожалуйста дайте ваше ценное предложение.

Parallel.ForEach(ListofData, item =>
            {
                if (this.DataSource != null && item != null)
                {
                    string itemText = this.GetListViewItemValue(item, this.displayMember);
                    if (!string.IsNullOrEmpty(this.Text) && itemText.ToLower().Equals(this.Text.ToString().ToLower()))
                    {
                        this.textBox.Text = itemText.ToString();
                        this.textBox.SelectAll();
                        this.listView.SelectedItems.Add(item);
                    }
                }
            });

1 Ответ

0 голосов
/ 12 ноября 2018

ПОЗДРАВЛЯЕМ, вы были моим 1000-м ответом

когда я должен использовать параллельный foreach и когда я должен использовать параллельный LINQ?

Они оба делают одно и то же, они оба построены на параллельной библиотеке задач и отличаются только семантикой.

Посмотрите на все перегрузки и методы расширения, и вы увидите, что иногда просто написать PLinq , иногда легче написать Parallel.For/Foreach

Что касается вашей проблемы, то это не имеет ничего общего ни с одним из подходов напрямую. Однако вы ARE пытаетесь обновить UI из потенциально другого потока и, скорее всего, не сможете.

Единственная причина, по которой этот не потерпит неудачу , заключается в том, что внутреннее устройство сочло это не пригодным для потоков и запускает его в исходном контексте.

Я думаю, вам действительно нужно переосмыслить свой подход, и если вы хотите использовать несколько потоков, вам нужно будет Marshal вернуться к UI Thread соответственно

Но когда я запускаю тестовые случаи nunit, он не работает

Что касается ваших тестовых случаев ... Я думаю, что у вас есть большие проблемы в данный момент, ваш код не является потокобезопасным

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...