Найти в Дзене
Как на самом деле работает Async/Await в C#

Как на самом деле работает Async/Await в C#

Цикл статей о асинхронной работе в c#
подборка · 11 материалов
211 читали · 1 год назад
Как на самом деле работает Async/Await в C# ч.11
Поля State Machine На данный момент мы рассмотрели сгенерированный метод точки входа и то, как работает все в реализации MoveNext. Мы также кратко посмотрели на некоторые поля, определенные в машине состояний. Давайте подробнее рассмотрим их. Для метода CopyStreamToStream, показанного ранее: Вот поля, на которые мы наконец-то наткнулись: Каждое из этих полей имеет свою специфику: И вы обнаружили, что значение состояния равно 2, что почти наверняка означает, что асинхронный метод в данный момент приостановлен, ожидая завершения задачи, возвращенной из C()...
1 год назад
Как на самом деле работает Async/Await в C# ч.10
SynchronizationContext и ConfigureAwait Мы обсуждали SynchronizationContext ранее в контексте шаблона EAP и упоминали, что он снова появится. SynchronizationContext позволяет вызывать повторно используемые вспомогательные функции и автоматически запланировать их выполнение в любое время и в любом месте, где это считает нужным вызывающая среда. В результате естественно ожидать, что это "просто работает" с async/await, и это так и есть. Вернемся к обработчику клика по кнопке из нашего предыдущего обсуждения:...
1 год назад
Как на самом деле работает Async/Await в C# ч.9
MoveNext Так, метод точки входа был вызван, структура машины состояний была инициализирована, был вызван метод Start, который, в свою очередь, вызвал MoveNext. Что такое MoveNext? Это метод, содержащий всю оригинальную логику из метода разработчика, но с множеством изменений. Давайте начнем просто с изучения каркаса метода. Вот декомпилированная версия того, что компилятор генерирует для нашего метода, но с удаленным всем содержимым внутри сгенерированного блока try: В любой другой работе, выполняемой...
100 читали · 1 год назад
Как на самом деле работает Async/Await в C# ч.8
Назад к началу Мы отвлеклись от обсуждения ExecutionContext, когда я писал о реализации AsyncTaskMethodBuilder.Start, которая, как я сказал, фактически была: а затем предложил немного упростить. Это упрощение игнорировало тот факт, что метод на самом деле должен учитывать ExecutionContext, и поэтому он больше похож на это: Вместо того, чтобы просто вызывать stateMachine.MoveNext(), как я предлагал ранее, мы начинает здесь танцевать: получаем текущий контекст ExecutionContext, затем вызываем его MoveNext,...
1 год назад
Как на самом деле работает Async/Await в C# ч.7
Контекст выполнения Мы все знакомы с передачей состояния от метода к методу. Вы вызываете метод, и если этот метод указывает параметры, вы вызываете метод с аргументами, чтобы передать эти данные вызываемому объекту. Это явная передача данных. Но есть и другие, более неявные средства. Например, вместо передачи данных в качестве аргументов метод может быть без параметров, но может диктовать, что некоторые конкретные статические поля могут быть заполнены до вызова метода, и метод будет извлекать состояние оттуда...
269 читали · 1 год назад
Как на самом деле работает Async/Await в C# ч.6
async/ await под капотом Теперь, когда мы знаем, как мы сюда попали, давайте углубимся в то, как это на самом деле это работает. Для справки, вот еще раз наш пример синхронного метода: и еще раз вот как выглядит соответствующий метод с async/ await: Простор свежего воздуха по сравнению со всем, что мы видели до сих пор. Подпись изменилась с void на async Task, мы вызываем ReadAsync и WriteAsync вместо Read и Write соответственно, и обе эти операции имеют префикс await. Вот и все. Компилятор и основные...