Salve a tutti,
in un componente Blazor (.razor) .net core 5.0 ho implementato questa funzione che aggiorna il mio database leggendo i dati da un file .txt:
private async Task updateDatabaseAsync()
{
try
{
[ ... code ... ]
// Update Database (post API)
//
int intTotal = 11;
List<string> lstMyList = File.ReadLines(strPathNameText).Reverse().Take(intTotal).Reverse().ToList();
//
string sep = "\t";
foreach (string txtMyDataInList in lstMyList)
{
MyData newData = new MyData();
//
newData.TypeData01 = txtMyDataInList.Split(separator: sep.ToCharArray())[0];
newData.TypeData01 = txtMyDataInList.Split(separator: sep.ToCharArray())[1];
newData.TypeData01 = txtMyDataInList.Split(separator: sep.ToCharArray())[2];
//
await MyService.PostUpdateDatabase(newData);
}
}
catch (Exception ex)
{
var errorMessage = ex.Message;
throw;
}
}
Il metodo funziona correttamente, in pratica mette in una lista le righe lette dal file .txt, esegue un ciclo foreach per leggere ogni singola riga e richiamare una web api per salvare i dati nel database (MyService.PostUpdateDatabase) che è pure questo un metodo asincrono.
Lo stesso metodo (e sottolineo LO STESSO) l'ho però spostato in una classe generica per poterlo utilizzare in più parti del codice e non funziona più! All'interno del ciclo foreach, quando richiama la web api, ritorna sempre l'errore: "object reference not set to an instance of an object", che non dice niente.
Ho provato varie alternative, ho eliminato il ciclo foreach e sostituendolo con Parallel, oppure ad usare "Task.WhenAll(tasks);", ma niente, sempre lo stesso errore. Ad esempio:
foreach (var txtEstrazione in lstUltimeEstrazioni)
{
tasks.Add(Task.Run(async () =>
{
MyData newData = new MyData();
//
newData.TypeData01 = txtMyDataInList.Split(separator: sep.ToCharArray())[0];
newData.TypeData01 = txtMyDataInList.Split(separator: sep.ToCharArray())[1];
newData.TypeData01 = txtMyDataInList.Split(separator: sep.ToCharArray())[2];
//
await MyService.PostUpdateDatabase(newData);
}));
}
Task.WhenAll(tasks);
tasks = null;
Secondo voi dove può essere il problema? Cosa posso indagare per capirne l'origine?
Grazie in anticipo.
Igor.