Как преобразовать цикл foreach в параллельный цикл foreach при использовании linq? [Дубликат]

Просто хочу внести дополнительную информацию: у меня была такая же проблема, и из-за того, что поле было недостаточно большим для входящих данных, и этот поток помог мне решить его (главный ответ проясняет все).

НО, но очень важно знать, каковы возможные причины, которые могут вызвать его.

В моем случае я создавал таблицу с таким полем:

Select '' as  Period, * From Transactions Into #NewTable

Поэтому поле «Период» имеет длину «Нуль» и приводит к сбою операций Insert. Я изменил его на «XXXXXX», то есть на длину входящих данных, и теперь он работал правильно (потому что у поля теперь было 6%).

Надеюсь, это поможет кому-то с той же проблемой:)

2
задан persianLife 11 February 2013 в 12:32
поделиться

4 ответа

Вы можете сделать:

Parallel.ForEach(delegates, handler => 
{ 
//your stuff 
});

Рассмотрим следующий пример

List<string> list = new List<string>()
{
    "ABC",
    "DEF", 
    "EFG"
};

Parallel.ForEach(list, str =>
{
    Console.WriteLine(str);
});

Вы также можете увидеть: Как написать простой параллельный цикл. ForEach Loop

10
ответ дан Habib 26 August 2018 в 17:25
поделиться

С некоторыми дополнениями к аргументу параметра Action<TSource> для вашей цели:

Parallel.ForEach(delegates, d => { ... });
0
ответ дан Grant Thomas 26 August 2018 в 17:25
поделиться

Простой пример из MSDN .

  // A simple source for demonstration purposes. Modify this path as necessary. 
string[] files = System.IO.Directory.GetFiles(@"C:\Users\Public\Pictures\Sample Pictures", "*.jpg");
string newDir = @"C:\Users\Public\Pictures\Sample Pictures\Modified";
System.IO.Directory.CreateDirectory(newDir);

//  Method signature: Parallel.ForEach(IEnumerable<TSource> source, Action<TSource> body)
Parallel.ForEach(files, currentFile =>
{
    // The more computational work you do here, the greater  
    // the speedup compared to a sequential foreach loop. 
    string filename = System.IO.Path.GetFileName(currentFile);
    System.Drawing.Bitmap bitmap = new System.Drawing.Bitmap(currentFile);

    bitmap.RotateFlip(System.Drawing.RotateFlipType.Rotate180FlipNone);
    bitmap.Save(System.IO.Path.Combine(newDir, filename));

    // Peek behind the scenes to see how work is parallelized. 
    // But be aware: Thread contention for the Console slows down parallel loops!!!
    Console.WriteLine("Processing {0} on thread {1}", filename, Thread.CurrentThread.ManagedThreadId);

    } //close lambda expression
); //close method invocation 
0
ответ дан Jonas W 26 August 2018 в 17:25
поделиться

Здесь довольно легко:

Parallel.ForEach(delegates, handler => 
                            {
                                 //Do your thing with the handler and may the thread-safety be with you.
                            });

Хотя это должно быть совершенно очевидно после прочтения документов.

0
ответ дан Patryk Ćwiek 26 August 2018 в 17:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: