Async Task Await problem

Async Task Await problem

offline
  • Lead Developer ⠀ ⠀⠀⠀⠀⠀⠀ Go 5 Creative
  • Pridružio: 14 Feb 2008
  • Poruke: 12264

Treba mi mala pomoć.

Imamo sample kod dole :

async void GetItems() {   foreach(item in Items)   {      foreach (property in Item)      {         await GetDetails(property.param, property.param2)       }      foreach (property2 in item)      {         await GetDetails(property.param, property.param2)       }   } } async Task GetDetails(param1, param2, etc.) {    // Blok koda    if (param1 < desiredParam)    (      GetDetails()     ) }

Iz petlje u GetItems pozivam GetDetails.

Problem je u tome što treba da sačekam da se završi ceo proces GetDetails pre nego što nastavim na sledeći property u for petlji.

Ova funkcija GetDetails može da se ponovi onoliko puta koliko ima sadržaja ...

Kada se pozove samo jednom, sve je OK, međutim kada treba da pozovem više puta GetDetails iz nje (GetDetails), nastaje problem.

Ovamo mi se petlja nastavlja a u pozadini se pokreće bezbroj GetDetails metoda, što je loše.

Voleo bih da rešenje ostane u okviru ove dve funkcije...

Dakle kada iz GetItems funkcije pozovem GetDetails unutar ForEach petlje, program treba da sačeka da se u potpunosti završi GetItems funkcija.

Funkcija treba da se završi jednom kada je param1 == desiredParam, tj. kada se GetDetails pokrene onoliko puta koliko treba a ne nakon prvog završavanja funkcije.

Ima li neko ideju ? cap cap



Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
offline
  • C# and PHP Developer
  • Pridružio: 16 Feb 2011
  • Poruke: 1622
  • Gde živiš: Pancevo

Zar ti nije lakse da za te pozadinske poslove koristis BackgroundWorker Class.

https://msdn.microsoft.com/en-us/library/system.co.....10%29.aspx

Nudi ti par sjajnih event-a koja bi ti ovde mogla pomoci.

RunWorkerCompleted Event, DoWork Event, ProgressChanged Ev.

Tako da sa njime mislim da bi mogao da resis ponavljanje bezbroj puta.



offline
  • Lead Developer ⠀ ⠀⠀⠀⠀⠀⠀ Go 5 Creative
  • Pridružio: 14 Feb 2008
  • Poruke: 12264

Moram ovako zbog :
http.GetByteArrayAsync

https://msdn.microsoft.com/en-us/library/system.ne.....2147217396

Pre toga stoji ključna reč await ...

Ova druga funkcija radi odlično kada je ja kontrolišem i pozivam samostalno ali pravi frku kada je pozovem iz petlje a mora da se pozove opet. Confused

offline
  • Srđan Tot
  • Am I evil? I am man, yes I am.
  • Pridružio: 12 Jul 2005
  • Poruke: 2483
  • Gde živiš: Ljubljana

Nije mi jasan taj primer, nije mi jasan problem, ali probaj ovako:
... if (param1 < desiredParam)    (      await GetDetails()     ) ...

offline
  • Pridružio: 25 Jan 2004
  • Poruke: 2784
  • Gde živiš: Niš

I meni je ovo jako konfuzno ... je l' si siguran da GetDetails mora da bude async? Jer kako si objasnio čini mi se da tebi baš i treba blocking execution za GetDetails Bebee Dol

offline
  • C# and PHP Developer
  • Pridružio: 16 Feb 2011
  • Poruke: 1622
  • Gde živiš: Pancevo

Ma jok kako kod da se okrene imace isti rezultat "beskonacno ima da vrti"...

offline
  • Lead Developer ⠀ ⠀⠀⠀⠀⠀⠀ Go 5 Creative
  • Pridružio: 14 Feb 2008
  • Poruke: 12264

Hvala vam, rešio sam problem.

Nije bio problem uopšte u kodu iznad, već u jednoj promenljivoj koja se nije ažurirala kad treba i resetovala je stalno prikupljanje podataka.

Meni je izgledalo kao da se neograničeno mnogo puta pokreće GetDetails i duplira unose.

Žao mi je što nisam mogao bolje da objasnim problem ali kod nisam mogao da podelim zbog moguće zloupotrebe.
Pri tom ne mislim na neku glupost već na ozbiljnu zloupotrebu koja bi mogla da nanese štetu.

Ko je trenutno na forumu
 

Ukupno su 861 korisnika na forumu :: 42 registrovanih, 7 sakrivenih i 812 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 3028 - dana 22 Nov 2019 07:47

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: A.R.Chafee.Jr., Apok, Areal84, Bane san, chester_perry, dejanbenkovic, djurdjija, dozorni, drdoca, Drug pukovnik, dtrivun, Duh sa sekirom, duskovuk63, galijot, goxin, indja, Ivan Germanovic, ivance95, ivica976, Jezekijel, kobaja77, kovac9mm, Kubovac, KUZMAR, Marko Marković, Megapurpletv, mercedesamg, milanstankovic087, Panter, proka89, RJ, rovac, sosko, Sr.Stat., TITAN DUDIN JARAN, TowerGuard, trajkoni018, Van, vasa.93, vlvl, zodiac94, |_MeD_|