Aszinkron hívások

Ebben a cikkben megmutatom az aszinkron hívások végrehajtását a kiszolgálói funkciókra és eljárásokra

A szinkron hívások előtt az aszinkron hívások fő előnye, hogy nem blokkolják a felhasználói felületet. Ha szinkronban elindít egy olyan eljárást vagy funkciót, amely folyamatosan végrehajt egy bizonyos műveletet, akkor a felhasználói felület jelenleg nem lesz elérhető.

Elmondhatjuk, hogy az építőiparban a jelentés a háttérben (SkomponovatRezultat (RezhimKomponovkiRezultata.Fonovy)) egy aszinkron hívást. Igaz ott kell kötni, hogy végül is csak emulálni aszinkron hívást a felismerés, hogy megmutatom.

1. Hagyományos és kezelt alkalmazások

2. Ügyfél-kiszolgáló és fájl mód

3. A kiszolgáló eljárások és funkciók aszinkron végrehajtása

4. A funkció által visszaadott érték

5. A hiba leírása

6. Aszinkron hívás törlése

7. Aszinkron hívás felmondásának ellenőrzése

8. Az aszinkron hívás előrehaladásának nyomon követése

Az aszinkron módon nevezett funkciók és eljárások követelményei

Az aszinkron módon nevezett funkciókat és eljárásokat exportálni kell, és a következő modulokban lehet:

- Objektumkezelők moduljai

- Globális és nem globális kiszolgáló megosztott modulok

A funkciókban és eljárásokban lévő paramétereknek képesnek kell lenniük az ügyfélről a kiszolgálóra történő átvitelre. E funkciókban a visszatérési értékeknek képesnek kell lenniük a szerverről az ügyfélre történő átvitelre.

Valójában azt mondhatod, hogy a követelmények ugyanazok, mint azok a függvények és eljárások, amelyek közös szerver modulokban vannak, a Szerverhívás jelével.

Közös modul aszinkron hívás

Ez a modul az aszinkron hívások program interfészének eljárásait és funkcióit tartalmazza. Csak ezzel a modullal dolgozhatsz aszinkron hívások készítésénél.

A program interfész a következő eljárásokból és funkciókból áll:

E struktúra körül minden művelet megtörténik - az aszinkron hívás összes információja benne van.

Állandó tulajdonságok:
Azonosító - aszinkron hívás (a háttér munka azonosítója után)
Funkciónév vagy Eljárás - a kiszolgáló funkciójának vagy eljárásának teljes neve
Ez a funkció a funkció indításának és a visszatérési értéknek a jele
Paraméterek - olyan paraméterek, amelyeket egy aszinkron hívás során egy függvényhez vagy eljáráshoz továbbítottak
Űrlap - egy olyan űrlap, amelynek moduljában vannak eljárások kezelői
A Terminátor neve a kiviteli eljárás neve, amely feldolgozza az aszinkron hívás befejezését
ImyaObrabotchikaHodaVypolneniya - a név a kiviteli eljárás formájában található a modul, amely kezeli a végrehajtása az aszinkron hívás
Automatikus visszautasítás - azon másodpercek száma, amelyeken keresztül automatikusan törli az aszinkron hívást
StartB - az aszinkron hívás indításához szükséges idő
Kontextus - minden olyan további információ, amely aszinkron hívással társítható

Változott tulajdonságok:
Állapot - aszinkron hívás állapota (aktív, teljes, törölt, befejezett)
Visszatérési érték a függvény által visszaadott érték (az eljárásokhoz ez a tulajdonság nincs jelen)
Az Execute érték értéke az előrehaladás értéke, például a befejezés százalékos aránya
MessageFlow - az összes olyan üzenet, amelyet az aszinkron hívott függvény vagy eljárás telt el
A hibák leírása - az aszinkron hívás során felmerülő hiba leírása

Önnek nem kell megváltoztatnia az ebben a struktúrában lévő értékeket.

Aszinkron eljárás vagy funkcióhívás

Az eljárást vagy a funkciót aszinkron módon csak az ügyféltől hívhatja. Ehhez két funkciót használ: Hívásfunkció és Hívási eljárás. Mindkettő visszaadja az aszinkron kihívás szerkezetét. De nem tudja feldolgozni az eredményt, ha visszaadnak, ha kezelőket használ, vagy nem szeretné figyelni a hívás sorsát.

Itt van a legegyszerűbb aszinkron hívás:

Ha az eljárás vagy funkció bejövő paraméterekkel rendelkezik, akkor a hívás így fog kinézni:

Asynchronous Call visszavonása

Az aszinkron hívás manuálisan törölhető, például:

Mint egy paramétert lehet telt AsinhronnyyVyzov szerkezetet, egy egyedi felhívás azonosítóját, egy tartalmazó karakterlánc egyedi azonosítóját a hívást vagy a tömb, amely tartalmazhat az összes korábban felsorolt.

Az összes aszinkron hívást egyszerre visszavonhatja, például:

Ebben az esetben azt mondhatjuk, hogy mindkét fenti példában maga a törlési hívás aszinkron, azaz. A telepítés befejezése után az aszinkron hívás állapota nem változik azonnal.

Emellett az aszinkron hívás egy meghatározott idő elteltével automatikusan törölhető, például:

Az aszinkron hívás befejezésének ellenőrzése

Az aszinkron hívás befejezésének (általában hiba esetén vagy törlése) nyomon követése érdekében a következőket kell tennie.

Először végre kell hajtanod az aszinkron hívásvégződtetőt.

Rendszeres formában és aszinkron módon meghívásos eljárással a kezelő így fog kinézni:

Egy kezelt űrlap és egy aszinkron meghívott függvény esetében a kezelő így fog kinézni:

Az Ön által választott kezelő neve.

Másodszor, az aszinkron hívás során át kell adnia a hívó űrlapot és a kilépési kezelő nevének paramétereit az űrlap moduljából, például:

Ha az aszinkron hívás befejeződik (rendszerint, hiba esetén vagy törlődik), a híváskezelőt hívjuk.

Megismerheti az aszinkron hívás befejezését a lezáró kezelő kapcsolata nélkül. Ehhez meg kell tartani a szerkezet AsinhronnyyVyzov visszaadó függvény VyzvatFunktsiyu és VyzvatProtseduru Időszakonként, vagy a gombnyomásra lehet ellenőrizni az érték az állapot.

Az aszinkron hívás előrehaladásának nyomon követése

Az aszinkron hívás hosszú ideig végrehajtható, és néha kívánatos lenne megérteni, hogy hányat már végrehajtottak, ami már végrehajtásra került, és így tovább.

Ennek a problémának a megoldására két kifejezést adtam: az előrehaladás és az előrehaladási jelentés értéke.

Az előrehaladás értéke az aszinkron hívás teljességét jellemző érték. Ez lehet a végrehajtás százaléka, a létrehozott objektumok száma. És nem kell számnak lennie, lehet olyan szerkezet, amely több értéket tartalmaz, és nem feltétlenül numerikus értékeket.

A haladási üzenetek olyan üzenetek, amelyek segítenek abban, hogy megértsék, mi lett már megvalósítva. Ez lehet az aszinkron hívásnaplózás vagy néhány fontos üzenet a felhasználó számára. És nem kell egy karakterlánc, lehet egy olyan struktúra, amely több értéket tartalmaz, és nem feltétlenül string.

Az érték és a haladási üzenetek különbözőek. Az érték minden pillanatban csak egy, de sok üzenet létezhet.

Ahhoz, hogy képes legyen kezelni az érték és az előrehaladás üzenetét, egy aszinkronnak nevezett függvénynek vagy eljárásnak különleges módon kell átadnia. Ehhez 2 műveletet hajtott végre: Frissítse az Execute értékét és adja hozzá az ExecuteCode üzenetet.

Körülbelül itt, így használhatók:

Tehát, ha a funkció vagy eljárás neve aszinkron, frissíti az értéket, vagy hozzáadja az előrehaladási üzeneteket, akkor követheti őket. Ehhez a következőket kell tennie.

Először egy aszinkron híváskezelőt kell végrehajtania. A szokásos formában így fog kinézni:

Az Ön által választott kezelő neve.

Másodszor, egy aszinkron hívás során át kell adnia a hívó űrlap paramétereit és a futási időkezelő nevét az alábbi űrlap moduljából:

A futási időkezelőt akkor hívják meg, amikor az előrehaladási érték frissül, vagy új előrehaladási üzenetek jelennek meg.

Az aszinkron hívás előrehaladásáról a futásidő-kezelő kapcsolata nélkül tájékozódhat. Ehhez meg kell tartani a szerkezet AsinhronnyyVyzov, amely visszatért VyzvatFunktsiyu funkció és VyzvatProtseduru Időszakonként, vagy a gombnyomásra lehet ellenőrizni az érték az ingatlanok és ZnachenieHodaVypolneniya SoobscheniyaHodaVypolneniya. Ha csak olyan új üzeneteket szeretne látni, amelyeket még nem kezel, akkor törölje azokat.

A demo konfigurációban Asynchronous Call.cf példát talál a normál alkalmazáshoz.

Aszinkron hívások

És egy kezelt alkalmazáshoz.

Aszinkron hívások

Pexe - érdekes.

Azt mondhatjuk, hogy az egész megvalósítás a következőkre épül:

- Háttéri feladatok és a Get Message módja a felhasználónak

- Globális várakozáskezelő

- Serialize / Deserialize with ValueVChapterV.Instance / ValueStringVar

További részletekért mindig nézd meg a megvalósítást az AsynchronousCalls.cf fájlban

A konfiguráció végrehajtásához 4 közös modulot kell átvezetnie:

Adja hozzá az exportált változó befejezetlen aszinkron hívásait is a kezelt és a normál alkalmazásokhoz.

Remélem, a cikkben leírt anyag hasznos lesz számodra.

Köszönöm a figyelmet.

Kapcsolódó cikkek