Monthly Archives: June 2012

Asinhroni C# (async / await)

Multi-core processorRazvojni tim je dobio zahtev za doradu aplikacije koja automatizuje zaprimanje robe i štampu deklaracija u magacinu. Posle inicijalnih podešavanja, aplikacija dobija ulaz sa bar kod čitača, a kao izlaz, osim što u bazi označava da je artikal zaprimljen, šalje deklaraciju artikla na štampu. Ideja je da po jedan bar kod skener i štampač budu vezani na jedan računar. Inicijalno je projekat bio složeniji, ali je promenom poslovnih procesa, ostala potreba samo za ovim delom funkcionalnosti. Uzeli smo parče koda sa serverskog dela, c# .net web servisa, koji je komunicirao sa bazom i štampačima, dodali u klijentsku Winforms aplikaciju kao biblioteku i to je proradilo.

Dobili smo desktop aplikaciju koja je imala svu logiku na klijentu, instaliranje softvera smo sveli na copy/paste i instalaciju drajvera za štampače, sve je idealno. Postavili smo test verziju, i dobili odgovor od korisnika da aplikacija funkcioniše ali je spora i koči. Gde je greška? Pri migraciji koda za štampu sa servisa na lokalni računar pozivi ka štampaču su postali sinhroni, što znači da aplikacija nije prihvatala ulaz sa bar kod čitača sve dok traje štampa. U praksi, ako imate četiri artikla jedan ispod drugog i pročitate sva četiri bar koda u nekoliko sekundi štampač će za to vreme stići da izbaci jednu ili dve deklaracije i samo će ti artikli biti zaprimljeni. Pored samih asinhronih poziva potrebno je vratiti i prikazati rezultat na korisničkom interfejsu.
dalje…