Mikä on ConfigureAwait?
Mikä on ConfigureAwait?

Video: Mikä on ConfigureAwait?

Video: Mikä on ConfigureAwait?
Video: How To Achieve Synchronization In C# While Doing Async Await Multithreaded Programming - .NET Core 2024, Marraskuu
Anonim

ConfigureAwait (false) sisältää tehtävän, joka on jo suoritettu siihen mennessä, kun sitä odotetaan (mikä on itse asiassa uskomattoman yleistä), sitten ConfigureAwait (false) on merkityksetön, koska säiettä jatkaa koodin suorittamista menetelmässä tämän jälkeen ja edelleen samassa kontekstissa, joka oli aiemmin.

Tämän jälkeen voidaan myös kysyä, mitä hyötyä ConfigureAwait false:sta on?

ConfigureAwait ( väärä ) määrittää tehtävän siten, että odotuksen jälkeistä jatkoa ei tarvitse suorittaa soittajan kontekstissa, jolloin vältetään mahdolliset lukkiutumiset.

Yllä olevan lisäksi mikä on SynchronizationContext? SynkronointiContext on esitys nykyisestä ympäristöstä, jossa koodimme on käynnissä. Toisin sanoen asynkronisessa ohjelmassa, kun delegoimme työyksikön toiselle säikeelle, sieppaamme nykyisen ympäristön ja tallennamme sen instanssiin SynkronointiContext ja aseta se Task-objektiin.

Kun tämä otetaan huomioon, mitä hyötyä ConfigureAwaitista on?

Käyttämällä ConfigureAwait (väärä) lukkiutumien välttäminen on vaarallinen käytäntö. Sinun pitäisi käytä ConfigureAwait-ohjelmaa (epätosi) jokaiselle odotukselle transitiivisessa sulkemisessa, kaikki estokoodin kutsumat menetelmät, mukaan lukien kaikki kolmannen ja toisen osapuolen koodit. Käyttämällä ConfigureAwait (false) lukkiutumisen välttäminen on parhaimmillaan vain hakkerointi).

Mikä on GetAwaiter?

GetAwaiter () -menetelmä, joka palauttaa ilmentymän, jolla on GetResult()-metodi. Kun sitä käytetään viallisessa tehtävässä, GetResult() välittää alkuperäisen poikkeuksen (näin "wait task;" käyttäytyy). GetResult(), koska se säilyttää tehtäväpoikkeukset sen sijaan, että se kääriisi ne AggregateExceptioniin.

Suositeltava: