Недавно я проверял метод C# «parallel.for» в отношении гоночных условий и обмена проблемами состояния. Чтобы проверить этот цикл, я внедрил простое приложение C# консоли, которое всегда должно возвращать одно и то же значение (см. Спрей кода ниже). Тем не менее, в случае выполнения, он возвращает разные значения. < /P>
Кто -нибудь знает причину этого? < /P>
Искренне, < /p>
using System.Collections.Concurrent;
var Ntests = 1000;
var repetitions = Enumerable.Range(0, Ntests).Select((rep) =>
{
var result = NewMethod(0,10);
return result;
}).ToArray();
bool shouldBreak = false;
foreach (var rep in repetitions)
{
foreach(var rep2 in repetitions)
{
if ( !rep.All(r => rep2.Contains(r)) ||
!rep2.All(r => rep.Contains(r))
)
{
Console.WriteLine("Routine not consistent");
Console.WriteLine("rep");
rep.ForEach(x => Console.Write(x));
Console.WriteLine("\nrep2");
rep2.ForEach(x => Console.Write(x));
shouldBreak = true;
break;
}
}
if ( shouldBreak )
{
break;
}
}
static List NewMethod(int init, int final)
{
var result = new ConcurrentBag();
Action agregate = (value) =>
{
if (!result.Contains(value))
{
result.Add(value);
}
};
Func inicializador = () => 0;
Func body = (i, state, threadAcum) =>
{
if (i % 2 == 0)
{
threadAcum += i;
}
return threadAcum;
};
Parallel.For(init,
final,
inicializador,
body,
agregate);
return result.ToList();
}
Подробнее здесь: https://stackoverflow.com/questions/794 ... on-executi
Почему c# parallel.for не согласуется между различными выполнениями агрегации того же метода с теми же входами? ⇐ C#
Место общения программистов C#
1739462407
Anonymous
Недавно я проверял метод C# «parallel.for» в отношении гоночных условий и обмена проблемами состояния. Чтобы проверить этот цикл, я внедрил простое приложение C# консоли, которое всегда должно возвращать одно и то же значение (см. Спрей кода ниже). Тем не менее, в случае выполнения, он возвращает разные значения. < /P>
Кто -нибудь знает причину этого? < /P>
Искренне, < /p>
using System.Collections.Concurrent;
var Ntests = 1000;
var repetitions = Enumerable.Range(0, Ntests).Select((rep) =>
{
var result = NewMethod(0,10);
return result;
}).ToArray();
bool shouldBreak = false;
foreach (var rep in repetitions)
{
foreach(var rep2 in repetitions)
{
if ( !rep.All(r => rep2.Contains(r)) ||
!rep2.All(r => rep.Contains(r))
)
{
Console.WriteLine("Routine not consistent");
Console.WriteLine("rep");
rep.ForEach(x => Console.Write(x));
Console.WriteLine("\nrep2");
rep2.ForEach(x => Console.Write(x));
shouldBreak = true;
break;
}
}
if ( shouldBreak )
{
break;
}
}
static List NewMethod(int init, int final)
{
var result = new ConcurrentBag();
Action agregate = (value) =>
{
if (!result.Contains(value))
{
result.Add(value);
}
};
Func inicializador = () => 0;
Func body = (i, state, threadAcum) =>
{
if (i % 2 == 0)
{
threadAcum += i;
}
return threadAcum;
};
Parallel.For(init,
final,
inicializador,
body,
agregate);
return result.ToList();
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79436956/why-c-sharp-parallel-for-is-not-consistent-between-different-aggregation-executi[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия