¿Por qué C # dicen que IterativeTask del CCR es no genérico?
Pregunta
Estoy usando el concurrencia y tiempo de ejecución de Coordinación y escribo código similar a lo que es se describe en la documentación. La siguiente línea falla al compilar:
yield return new IterativeTask<string,Object,Object,long[]>("Hi",a,b,ls, itfunc);
El compilador da este mensaje de error:
The non-generic type 'Microsoft.Ccr.Core.IterativeTask' cannot be used with type arguments
¿Qué se mistifying debido a que la documentación utiliza ese método con argumentos de tipo y está claro que es genérica.
(Voy a publicar mi propia respuesta aquí, eso es alentado como yo lo entiendo)
Solución
Resulta que hay un límite en el número de parámetros genéricos se puede utilizar con IterativeTask: se puede tomar de tres pero no más
.Por lo tanto, este código se compila (una vez que cambie itfunc a utilizar uno menos argumento):
yield return new IterativeTask<string,Object,long[]>("Hi",a,ls, itfunc);
Si usted realmente no necesita toda la información en los argumentos, puede crear algún tipo de mantenerlos:
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);