Size: a a a

2020 October 03

MN

Mr. N in .NET Talks
async не создает потоки
источник

G

Golphyn in .NET Talks
-_-
источник

MN

Mr. N in .NET Talks
Mr. N
async не создает потоки
Только генерирует машину состояний
источник

G

Golphyn in .NET Talks
async/await простая обертка для стейт машины и вообще существует, дабы ты писал асинхронный код в синхронном стиле
источник

G

Golphyn in .NET Talks
неожиданно, асинхронно можно писать и без async/await
источник

IC

Ilya L Che in .NET Talks
Ilya L Che
Нет. Блокирующий код — код, который занимает поток, но при этом не выполняет полезную работу.

var a = 1 + 2
var b = a + 3

Код выше синхронный, но не блокирующий, потому что всегда занят полезный работой.

var a = RemoteServer.Add(1, 2)
var b = RemoteServer.Add(a, 3)

Код выше такой же синхронный, но при это блокирующий. Потому что поток ничего не делает, пока запрос доставляется серверу, пока сервер считает ответ, который потом возвращается.

Да, в обоих ситуациях ОС может отнять на время у нашего приложения поток для своих задач. Но это другой уровень абстракции, который нас не волнует в данном случае.
С async/await, если очень упрощать, будет так:
Дошли до строчки await RemoteServer.Add(1, 2). Дали команду сокету на отправку запроса, сохранили состояние метода в памяти, ждём прихода ответа, восстанавливаем состояние метода и продолжаем выполнение.
источник

A

Aloraman in .NET Talks
async/await для асинхронности не обязателен, многопоточность и асинхронность - вообще ортогональные понятия. Вся суть в вызове из текущей операции другой операции. Если выполнение текущей операции происходит только после завершения другой операции - вызов синхронный, если выполнение может быть продолжено до завершения другой операции - вызов асинхронный.
источник

G

Golphyn in .NET Talks
Ilya L Che
И я не создаю. Код после завершения ожидания может продолжить выполняться на том же потоке. Какой дадут, на том и будет.
тут стоит добавить, что это справедливо только для .net. Пишу, потому что я уже чет запутался, под призмой чего мы на все это смотрим)
источник

IC

Ilya L Che in .NET Talks
И вот на продолжении выполнения могут любой свободный поток подсунуть. Если в системе он один, то подсунут его. Но до продолжения работы он нам не нужен, он будет занят подсчётами для интерфейса ОС, например или установкой обновления.
источник

IC

Ilya L Che in .NET Talks
Golphyn
тут стоит добавить, что это справедливо только для .net. Пишу, потому что я уже чет запутался, под призмой чего мы на все это смотрим)
Да, конечно. И я тоже немного запутался, но пытаюсь держаться в рамках дотнета.
источник

MN

Mr. N in .NET Talks
Ilya L Che
С async/await, если очень упрощать, будет так:
Дошли до строчки await RemoteServer.Add(1, 2). Дали команду сокету на отправку запроса, сохранили состояние метода в памяти, ждём прихода ответа, восстанавливаем состояние метода и продолжаем выполнение.
сохранения никакого не будет, он будет ждать ответа в том потоке
источник

MN

Mr. N in .NET Talks
и ждать ответа
источник

IC

Ilya L Che in .NET Talks
Mr. N
сохранения никакого не будет, он будет ждать ответа в том потоке
О-хо-хо, ну пусть будет по-твоему.
источник

G

Golphyn in .NET Talks
источник

MN

Mr. N in .NET Talks
То для этого надо использовать await Task.Run(x=>...);
источник

MN

Mr. N in .NET Talks
Если не использовать потоки, в async, await нет  смысла
источник

IC

Ilya L Che in .NET Talks
Это ты уже в таски полез, а не в async/await. Но я всё.
источник

MN

Mr. N in .NET Talks
Ilya L Che
Это ты уже в таски полез, а не в async/await. Но я всё.
Скачай dnspy
источник

G

Golphyn in .NET Talks
Третий круг будет уже перебором)
источник

MN

Mr. N in .NET Talks
посмотри что будет после компиляции
источник