Čo je ConfigureAwait?
Čo je ConfigureAwait?

Video: Čo je ConfigureAwait?

Video: Čo je ConfigureAwait?
Video: How To Achieve Synchronization In C# While Doing Async Await Multithreaded Programming - .NET Core 2024, Smieť
Anonim

ConfigureAwait (false) zahŕňa úlohu, ktorá je už dokončená v čase, keď sa na ňu čaká (čo je v skutočnosti neuveriteľne bežné), potom ConfigureAwait (false) bude bezvýznamné, pretože vlákno pokračuje vo vykonávaní kódu v metóde po tomto a stále v rovnakom kontexte, ktorý tam bol predtým.

Následne si možno položiť otázku, na čo slúži ConfigureAwait false?

ConfigureAwait ( falošné ) nakonfiguruje úlohu tak, aby sa pokračovanie po čakaní nemuselo spúšťať v kontexte volajúceho, čím sa zabráni možným uviaznutiam.

Okrem vyššie uvedeného, čo je SynchronizationContext? Synchronizačný kontext je reprezentácia aktuálneho prostredia, v ktorom beží náš kód. To znamená, že v asynchrónnom programe, keď delegujeme jednotku práce na iné vlákno, zachytíme aktuálne prostredie a uložíme ho do inštancie Synchronizačný kontext a umiestnite ho na objekt úlohy.

Ak vezmeme do úvahy toto, na čo slúži ConfigureAwait?

Použitím ConfigureAwait (false) vyhnúť sa zablokovaniu je nebezpečná prax. To by si musel použite ConfigureAwait (false) za každé čakanie na prechodné uzavretie všetkých metód volaných blokovacím kódom, vrátane všetkých kódov tretích strán a tretích strán. Použitím ConfigureAwait (false) vyhnúť sa zablokovaniu je v najlepšom prípade len hack).

Čo je GetAwaiter?

GetAwaiter (), ktorá vráti inštanciu, ktorá má metódu GetResult(). Keď sa použije na chybnej úlohe, GetResult() rozšíri pôvodnú výnimku (takto sa správa „čakajúca úloha; “). GetResult(), pretože zachováva výnimky úloh namiesto ich zabaľovania do AggregateException.