Threading Task forståelse
HejsaJeg er i denne weekend ved at prøve at erobre threading delen i .Net frameworket.
Jeg undrer / spekulerer mig over, hvordan det fungerer.
Jeg har fx. lavet tre metoder:
Som jeg bruger til at udfylde data i et hovedobjekt.
// Hovedobjekt
Person p = new Person();
public List<Interesse> HentPersonInteresser()
{
...
...
...
return interesser;
}
public List<Sprog> HentPersonSprog()
{
...
// lagt en forsinkelse ind i 10 sek. For at simulere en lang somoperation
...
return sprog;
}
public List<Aktivitet> HentPersonAktiviteter()
{
...
...
return aktiviteter;
}
Herefter samler jeg kaldene ved at definere tre tasks
var interesser = Task<List<Interesse>>.Factory.StartNew(() => MinStatiskeKlasse.HentPersonInteresser());
var sprog = Task<List<Sprog>>.Factory.StartNew(() => MinStatiskeKlasse.HentPersonSprog());
var aktiviteter = Task<List<Aktivitet>>.Factory.StartNew(() => MinStatiskeKlasse.HentPersonAktiviteter());
p.Interesser = interesser.Result;
p.Sprog = sprog.Result;
p.Aktiviteter = aktiviteter.Result;
Jeg prøver at debugge mig igennem og bruger faktisk også parallel watch på p.Interesser, p.Sprog og p.Aktiviteter, men jeg kan ikke se at aktiviteter bliver afsluttet / populeret før sprog, som jeg jo har lagt imellem med en forsinkelse i.
Kan jeg være sikker på at ovenstående giver mig tre separate tråde, der arbejder isoleret og ikke afventer på hinanden sekventielt?
Jeg vil jo forvente at min tredje metode, fylder p.Aktiviteter op før p.Sprog.
Er ovenstående korrekt, ifht. den multitråde tilgang og performance optimering, jeg prøver at opnå?
Jeg er åben for forslag og andre måder at løse min performance optimeringstrang på...