Tengo problemas para usar las nuevas herramientas async/await en C#. Aquí está mi escenario:Sintaxis para iniciar muchas tareas asíncronas en C#
static async Task<bool> ManageSomeRemoteTask(int Id, bool flag)
{
var result = await serviceClient.AuthenticateIdAsync(Id);
[... Setup Some Data ...]
await serviceClient.LongAndSlowRemoteCallAsync(Data);
}
static void SendATonOfJunkToSomeWebServiceThatDoesntSupportBatches
{
var myTasks = Dictionary<int, Task<bool>>();
while(IdsLeftToProcess > 0)
{
Task<bool> t = ManageSomeRemoteTask(Id, true);
myTasks.Add(IdsLeftToProcess ,t);
myTasks[IdsLeftToProcess].Start();
IdsLeftToProcess --;
}
Task.WaitAll(myTasks.Values.ToArray()); //Wait until they are all done
[... Report statistics ...]
}
tengo 1 problema de que cuando trato de ejecutar esto, me sale un InvalidOperationException en el inicio() con el mensaje de error " de inicio no puede ser llamado en una tarea de estilo promesa . "Este mensaje de error no aparece en Google o Bing, así que no estoy seguro de lo que significa. Esta es mi preocupación número uno, cómo hacer que esto funcione. También probé TaskFactory.StartNew() pero no entendí cómo pasar parámetros a mi método de esa manera.
A pesar de mi opinión de que la línea no debería estar allí en absoluto, se ahorraría un poco de tiempo al no tirar de algo que ya tiene una referencia al rendimiento del diccionario como tal ... 'myTasks [IdsLeftToProcess] .Start();' se habría representado mejor por 't.Start()' (si fuera necesario en primer lugar) – spender