Я пытаюсь реорганизовать некоторый код для достижения большей пропускной способности за счет параллелизма. Я сделал весь базовый рефакторинг туда, где у меня был минималистичный одиночный вызов, который был бы поточно-ориентированным. Мой метод принимает несколько параметров:
private Domain ImportDomain(ConstructorInfo domainConstructor,
string[] domainAttributes, DateTime importDate)
{
...
}
У меня есть рабочий код, который повторяет вызовы этого метода, просто так:
ImportDomain(myConstructor, myAttributes, myDate);
Все прекрасно работает, прежде чем я пытаюсь добавить параллелизм.
Я думал, что просто смогу сделать это:
Task<Domain>.Factory.StartNew(() =>
ImportDomain(myConstructor, myAttributes, myDate)
);
и добавьте блок catch для обработки любого AggregateException, который может быть выдан.
Однако я обнаружил, что ImportDomain()
никогда не вызывался с этим кодом, хотя выполнялась строка StartNew()
. У меня такое чувство, что это может быть связано с моей относительной неопытностью в отношении лямбда-выражений, но я также вижу, что все примеры, использующие StartNew()
, либо используют делегаты, либо передают один параметр.
Как проще всего сделать мой многопараметрический вызов совместимым с Task.Factory.StartNew()
?