Изменение цикла foreach на цикл Parallel.ForEach

Хорошо, вот основная предыстория. Эта программа подключается к Outlook / Exchange и анализирует все почтовые сообщения, чтобы узнать, какие из них зашифрованы. Одна из вещей, которую я хотел бы сделать, - это использовать многопоточность, чтобы уменьшить время, необходимое для сканирования сообщений.

В настоящее время код выглядит так:

foreach (Object item in folder.Items) {
//Checks for encryption and gets needed info and updates count
}

И я хотел бы вместо этого использовать функцию Parallel.ForEach. Мне было интересно, как я могу это настроить. Я попытался настроить выражение так, как оно есть сейчас, но получаю сообщение об ошибке, указывающее, что тип объекта используется как переменная. Любая помощь с этим будет принята с благодарностью.

Хорошо, макет, который мне дали, кажется правильным. Прямо сейчас код выглядит следующим образом:

Parallel.ForEach(folder.Items, item =>
{
//does stuff
});

Я получаю следующую ошибку:

Ошибка 15 Аргументы типа для метода System.Threading.Tasks.Parallel.ForEach (System.Collections.Concurrent. OrderablePartitioner, System.Action) ' не может быть выведен из использования. Попробуйте явно указать аргументы типа .

Есть идеи? Спасибо за вашу помощь, ребята, это очень ценно.

Хорошо, я нашел этот сайт: http://blogs.msdn.com/b/pfxteam/archive/2010/03/02/9971804.aspx , и он дал мне ответ, который мне был нужен Ошибка. Мне просто нужно было изменить коллекцию на универсальную, сделав функцию приведения.

static IEnumerable Cast(IEnumerable source)
{
    foreach (object o in source)
        yield return o;
}

А затем настройте оригинал на

Parallel.ForEach(Cast(folder.Items), item =>
{
//does stuff
});

Теперь он работает без ошибок. Ура.

7
задан Micro125 23 November 2011 в 15:42
поделиться