запустить один и тот же метод в нескольких задачах, заменить предыдущий объект, отправленный в качестве параметра - PullRequest
0 голосов
/ 31 мая 2019

Я запускаю задачу, у которой есть метод с именем createpdf (obj);У меня есть список того же объекта и с помощью цикла forEach я создаю задачу метода createpdf;

, но когда последняя задача вызвала метод, она также изменит все предыдущие значения объекта.

createpdf(obj){

}

createtask(){

Parallel.ForEach(objeclist, m => createpdf(m) );
}

теперь при последнем запуске задачи все результаты задачи будут изменены.

1 Ответ

0 голосов
/ 31 мая 2019

Это нормальное поведение для ссылочных типов, когда вы изменяете свойство одного и того же объекта разными ссылками. Ваш список содержит разные ссылки на один и тот же объект, и когда одно свойство изменяется с помощью метода createpdf, все ссылки также изменяются на свойство. Могли бы прочитать эту статью о разнице ссылок и типов структуры в C #:

https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/reference-types

https://vegibit.com/reference-types-and-value-types-in-c/

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

...