У меня есть программа, которая содержит 2 списка, эта программа басирована для поиска файла, а затем сравнивается с StopWatch
разницей в использовании AsyncAwait
и TPL ... В первом списке используется функция с использованием AsyncAwait
(I не знаю, если это лучший способ сделать это, но это работает, см мой код ниже)Параллельный для каждого файла поиска
private async void button1_Click(object sender, EventArgs e)
{
Stopwatch stopWatch = new Stopwatch();
foreach (string d in Directory.GetDirectories(@"C:\Visual Studio Projectes\Hash\AsyncAwait\Carpetes"))
{
foreach (string s in Directory.GetFiles(d))
{
stopWatch.Start();
listBox1.Items.Add(s);
await Task.Delay(1);
btIniciar1.Enabled = false;
}
}
btIniciar1.Enabled = true;
stopWatch.Stop();
TimeSpan ts = stopWatch.Elapsed;
textBox1.Text = ts.ToString("mm\\:ss\\.ff") + (" minuts");
}
а потом в моей второй ListBox, где я застрял, я не знаю, как реализовать Parallel.ForEach
действовать как async
, что лучший способ сделать это? Я не могу найти способ использовать TPL в этом случае, чтобы сделать то же самое, что и мой первый список, не могли бы вы мне помочь?
Вы используете winforms или WPF? Также не совсем ясно, что вы пытаетесь сделать, если вы просто пытаетесь добавить список файлов в 'listBox1'. Если это так, ваше параллельное решение будет медленнее, потому что вы можете иметь только один поток, добавляющий элементы одновременно и каждый должен будет ждать своей очереди. Если вы делаете что-то еще, то ForEach может работать лучше, но вы должны показать нам, что действительно сделает ваш ForEach. –
Я использую winforms – Dix
Parallel.ForEach был бы плохим для этого, так как только поток пользовательского интерфейса может обновлять пользовательский интерфейс, поэтому вам нужно будет вернуться к этому потоку, чтобы фактически добавить файл в список. Лучше вернуть массив строк (например, имена файлов) из функции, если вы действительно должны попробовать этот эксперимент. – samjudson