Skip to main content

Posts

Showing posts with the label sincronizare

Use lock in a block that contains a call to an async method (await keyword)

Citeam urmatorul post http://qedcode.com/content/awaitable-critical-section , in care se explica o modalitate de a face lock in cazul in care in block-ul de lock contine un apel la o metoda async. Pe scurt, pentru a evita ca doua sau mai multe thread-uri sa scrie simultan in acelasi fisier, se incerca sa se faca lock. Dar .NET 4.5 nu ne lasa sa avem urmatorul cod (si foarte bine face): lock( this ) { var f = await storageFile.OpenAsync(); ... await file.WriteAsync("some content"); } Eroarea pe care o primim arata in felul urmator: The 'await' operator cannot be used in the body of a lock statement. In link-ul pe care l-am dat mai sus, s-a incercat implementarea unei solutii custom care face lock la o anumita portiune de cod. O alta varianta ar putea sa fie sa incerca sa folosim Task.Run. Cea ce am obtine ar fi ceva asemanator cu urmatorul cod lock( this ) { var f = await storageFile.OpenAsync(); ... Task.Run(async () => {await f.Writ...

How to lock a method - synchronized

Nu odată mi s-a întîmplat sa am nevoie sa sincronizez una sau mai multe metode din aceiași clasa. In funcție de situație foloseam un cod asemănător cu cel de mai jos: class ItemsStore { void AddItem(Item item) { lock(this) { ... } } void RemoveItem(Item item) { lock(this) { ... } } Item[] GetAvailableItemes() { lock(this) { ... } } } Sunt cazuri când lock-ul se face pe un field sau pe un obiect diferit de this dintr-o alta clasa. Unu din dezavantaje care apare în acest caz este apariția a unui nou nivel de indentare. Am descoperit un alt mecanism prin care se poate face lock automat pe metodele dorite. Deși exista din .NET 1.1 și cea mai mare parte din voi l-ați folosit deja, am considerat ca merita amintit. Prin intermediul atributului MethodImpl putem specifica modul în care sa se facă lock-ul pentru fiecare metoda în parte( nu mai este nevoie sa folosim lock s...

Cum putem sincroniza un director cu un blob din cloud.

Ieri am vorbit despre modalitatea prin care una sau mai multe instante de SQL Azure se pot sincroniza. Astazi o sa incerc sa o ofer o solutie pentru cazul in care un client adauga in mod deconectat date pe blob, pe care noi vrem mai tarziu sa le le sincronizam cu blob-urile din cloud. Problema: Se da un client care lucreaza cu date din blob-uri in mod deconectat. Se doreste ca la reconectare sa se sincronizeze cele doua storage-uri. Ati spune simplu, ne apucam sa ne scriem un mecanism prin care sa putem sincroniza cele doua containere de date. Da, e si asta o varianta, dar oare merita sa implementam de la zero acest mecanism. Ati putea spune ca putem vedeam cele doua storage-uri ca si doua directoare si atunci sa folosim un mecanism de sincronizare a directoarelor. Suna bine, dar am o solutie mult mai curata - Microsoft Sync Framework . Se bazeaza pe idea de a vedea cele doua storage-uri ca si doua directoare( partitii). Folosindu-ne de Microsoft Sync Framework putem sa sincronizam ac...