Почему C # говорит, что итеративная задача CCR не является универсальной?
Вопрос
Я использую Среда выполнения параллелизма и координации и я пишу код, подобный тому, что описан в документации.Следующая строка не компилируется:
yield return new IterativeTask<string,Object,Object,long[]>("Hi",a,b,ls, itfunc);
Компилятор выдает это сообщение об ошибке:
The non-generic type 'Microsoft.Ccr.Core.IterativeTask' cannot be used with type arguments
Что вводит в заблуждение, потому что документация использует этот метод с аргументами типа, и он явно универсальный.
(Я собираюсь опубликовать здесь свой собственный ответ, который поощряемый как я это понимаю)
Решение
Оказывается, существует ограничение на количество общих параметров, которые можно использовать с помощью IterativeTask:это может занять три, но не больше.
Итак, этот код компилируется (как только вы измените itfunc, чтобы использовать на один аргумент меньше).:
yield return new IterativeTask<string,Object,long[]>("Hi",a,ls, itfunc);
Если вам действительно нужна вся информация в аргументах, вы можете создать какой-нибудь тип для их хранения:
struct Z {
string msg;
Object one;
Object two;
long[] ls;
}
Z z = new Z { msg="Hi", one=a, two=b, ls= longs };
yield return new IterativeTask<Z>(z, itfunc);