Найти в Дзене
ConfigureAwait

ConfigureAwait

Один из аспектов async/ await, который продолжает вызывать вопросы, — это ConfigureAwait. В этом цикле статей я надеюсь ответить на многие из них.
подборка · 5 материалов
1 год назад
Поговорим о ConfigureAwait ч.5
Могу ли я использовать Task.Run, чтобы избежать использования ConfigurationAwait(false)? Да. Если вы напишете: тогда a ConfigureAwait(false) в этом SomethingAsync() вызове будет nop, потому что переданный делегат Task.Run будет выполнен в потоке пула потоков, без пользовательского кода выше в стеке, так что он SynchronizationContext.Current вернет null. Кроме того, Task.Run неявно используется TaskScheduler.Default, что означает, что запрос TaskScheduler.Current внутри делегата также вернет Default...
1 год назад
Поговорим о ConfigureAwait ч.4
Что делает ConfigurationAwait(false)? Метод ConfigureAwait не является особенным: он не распознается каким-либо особым образом ни компилятором, ни средой выполнения. Это просто метод, который возвращает структуру (ConfiguredTaskAwaitable), которая обертывает исходную задачу, для которой она была вызвана, а также указанное логическое значение. Помните, что его await можно использовать с любым типом, который демонстрирует правильный шаблон. Возвращение другого типа означает, что когда компилятор обращается...
1 год назад
Поговорим о ConfigureAwait ч.3
Как SynchronizationContext и TaskScheduler связаны с await? Рассмотрите возможность написания приложения пользовательского интерфейса с расширением Button. Нажав на кнопку Button, мы хотим загрузить некоторый текст с веб-сайта и установить его как Button's Content. Доступ к Button должен быть возможен только из потока пользовательского интерфейса, которому он принадлежит, поэтому, когда мы успешно загрузили новый текст даты и времени и хотим сохранить его обратно в Button, Content нам нужно сделать это из потока, которому принадлежит элемент управления...
1 год назад
Поговорим о ConfigureAwait ч.2
Что такое планировщик задач? SynchronizationContext — это общая абстракция для «планировщика». Отдельные фреймворки иногда имеют свои собственные абстракции для планировщика, и System.Threading.Tasks это не исключение. Когда Tasks поддерживаются делегатом, поэтому их можно поставить в очередь и выполнить, они связаны с файлом System.Threading.Tasks.TaskScheduler. Точно так же, как SynchronizationContext предоставляет виртуальный Post метод для постановки в очередь вызова делегата (с последующим вызовом...
1 год назад
Поговорим о ConfigureAwait ч.1
В .NET добавили async/ await к языкам и библиотекам более семи лет назад. За это время он распространился как лесной пожар не только по всей экосистеме .NET, но и был воспроизведен во множестве других языков и платформ. Также было замечено множество улучшений в .NET с точки зрения дополнительных языковых конструкций, использующих асинхронность, API, предлагающих поддержку асинхронности, и фундаментальных улучшений в инфраструктуре, которая делает async/ awaitтикает (в частности, улучшения производительности и возможности диагностики в ...