В этом случае вы на самом деле не исследуете, как LINQ справляется с многопоточностью.Скорее, вы используете ссылку, чтобы сохранить несколько строк кода при работе с потоками самостоятельно.
Начиная с .Net 4.0, LINQ оказывает некоторую полезную помощь по созданию потоков из коробки.Исследуйте Parallel LINQ .Также обратите внимание на Parallel Extensions .
Что касается вашей старомодной обработки потоков, с которой вы случайно используете LINQ, ваша проблема на самом деле является результатом использования LINQ.Ваша проблема связана с отложенным выполнением .В режиме отладки наведите курсор на переменную threads после этой строки.Вы увидите, что это запрос, а не простая коллекция.Каждый раз, когда вы получаете доступ к этой переменной, она получает значения заново.
Исправление легко и очень распространено: просто добавьте .ToList () в конце первой строки.Ваша неявно введенная переменная threads будет тогда простым списком и будет вести себя так, как вы ожидаете.
var threads = Enumerable.Range(0, 50).Select(x =>
{
Thread thread = new Thread(Method);
thread.Name = x.ToString();
return thread;
}).ToList();