Какво е ConfigureAwait?
Какво е ConfigureAwait?

Видео: Какво е ConfigureAwait?

Видео: Какво е ConfigureAwait?
Видео: How To Achieve Synchronization In C# While Doing Async Await Multithreaded Programming - .NET Core 2024, Ноември
Anonim

ConfigureAwait (невярно) включва задача, която вече е завършена до момента, в който се очаква (което всъщност е невероятно често срещано явление), тогава ConfigureAwait (false) ще бъде безсмислено, тъй като нишката продължава да изпълнява код в метода след това и все още в същия контекст, който е бил там преди.

Впоследствие може да се запитаме и каква е употребата на ConfigureAwait false?

ConfigureAwait ( фалшиво ) конфигурира задачата така, че продължаването след изчакването да не трябва да се изпълнява в контекста на повикващия, като по този начин се избягват всякакви възможни блокирания.

Освен по-горе, какво е SynchronizationContext? SynchronizationContext е представяне на текущата среда, в която се изпълнява нашия код. Тоест в асинхронна програма, когато делегираме единица работа на друга нишка, ние улавяме текущата среда и я съхраняваме в екземпляр на SynchronizationContext и го поставете върху обекта Task.

Като се има предвид това, каква е ползата от ConfigureAwait?

Използвайки ConfigureAwait (невярно) избягването на безизходи е опасна практика. Би трябвало използвайте ConfigureAwait (false) за всяко изчакване при преходно затваряне на всички методи, извиквани от блокиращия код, включително всички кодове на трета и втора страна. Използвайки ConfigureAwait (false) за избягване на задънена улица в най-добрия случай е просто хак).

Какво е GetAwaiter?

GetAwaiter () метод, който връща екземпляр, който има метод GetResult(). Когато се използва за повредена задача, GetResult() ще разпространи оригиналното изключение (ето как “await task;” получава своето поведение). GetResult(), защото запазва изключенията на задачите, вместо да ги обвива в AggregateException.

Препоръчано: