Por que C# diz que o ITERITIVETASK do CCR é não genérico?
Pergunta
Estou usando o Tempo de execução de simultaneidade e coordenação e estou escrevendo código semelhante ao descrito na documentação. A linha a seguir falha em compilar:
yield return new IterativeTask<string,Object,Object,long[]>("Hi",a,b,ls, itfunc);
O compilador fornece esta mensagem de erro:
The non-generic type 'Microsoft.Ccr.Core.IterativeTask' cannot be used with type arguments
O que é misturado porque a documentação usa esse método com argumentos de tipo e é claramente genérico.
(Vou postar minha própria resposta aqui, isso é encorajado Como eu entendo)
Solução
Acontece que há um limite para o número de parâmetros genéricos que se pode usar com o iterativeTask: pode levar três, mas não mais.
Portanto, esse código compila (depois de alterar o ITFUNC para usar menos um argumento):
yield return new IterativeTask<string,Object,long[]>("Hi",a,ls, itfunc);
Se você realmente precisa de todas as informações nos argumentos, pode criar algum tipo para mantê -los:
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);
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow