@CSharpChatЭта группа больше не существует

Страница 587 из 1888
Летучая
18.03.2017
19:06:27
Через BeginInvoke можно пинать
Обычно пинаю чз ContinueWith/FromCurrentSynchronizationContext() и/или Dispatcher.RunAsync()

Arseniy
18.03.2017
19:06:42
.Rusult - блокирущая await и ContinueWith - нет

‮ACx0
18.03.2017
19:06:48
И самый большой вопрос: зачем? нельзя просто сделать всё в одном месте, а потом перейти в другое?

Ilya
18.03.2017
19:06:50
теперь, так как у нас никаких SynchronizationContext нет, по прошествии 1000 милисекунд Task.Delay завершается

Google
Ilya
18.03.2017
19:07:08
что зачем?

теперь, так как у нас никаких SynchronizationContext нет, по прошествии 1000 милисекунд Task.Delay завершается
и при выходе из метода Такс становится завершенным и мутекс переходит в сигнальное состояние и результат выолнения становится доступен

ну и метод завершается

и при выходе из метода Такс становится завершенным и мутекс переходит в сигнальное состояние и результат выолнения становится доступен
ещё момент, из за того, что у нас нет SynchonizationContext остаток метода AsyncRequest выполнится на потоке пула (каком нибудь)

Axm
18.03.2017
19:09:10
А в чём предмет срача? Пропустил начало, не могу сориентироваться.

Ilya
18.03.2017
19:09:33
рассказываем как работает async/await

Летучая
18.03.2017
19:09:38
А в чём предмет срача? Пропустил начало, не могу сориентироваться.
тут не срач, тут интересное обсуждение принципов работы async/await

Axm
18.03.2017
19:09:48
Откуда началось?

Axm
18.03.2017
19:10:01
Сделайте плес реплай

‮ACx0
18.03.2017
19:12:37
А почему управление прыгает? Почему не выполнить по порядку? Или же это и есть синхронность?

Ilya
18.03.2017
19:14:33


вот так нагляднее

Google
‮ACx0
18.03.2017
19:16:03
Применение поймать не могу. Я могу понять запуск таска без .Result/await, который будет заполнять очередь (и ничего не возвращать) и запуск за ним разборщика очереди, который уже будет что-то возвращать. Тут две задачи (первая из которых может содержать в себе ещё несколько) параллельно запускаются и вторую мы await, а первую нет. Вообще считал всегда, что async методы для того, чтобы запустить их, они в фоне болтались, а в это время дальше работать, не ожидая его. А если ждать надо, то await.

Ilya
18.03.2017
19:16:05
А почему управление прыгает? Почему не выполнить по порядку? Или же это и есть синхронность?
потому что ты так используешь, тебе просто никто не запрещает ковыряться в носу через жопу, просто неудобно

‮ACx0
18.03.2017
19:20:58
есть асинхронность и многопточность, это как тёплое и мягкое
Это я понял. И то, что асинхронность я не понял, я тоже понял. С многопоточностью как-то намного проще.

Axm
18.03.2017
19:21:09
Вообще-то Parallel.For не гарантирует выполнение в разных потоках.

Ilya
18.03.2017
19:22:01
Вообще-то Parallel.For не гарантирует выполнение в разных потоках.
оно обычно так работает, тут 10 задач - создастся 4 потока и в каждом выполнится по 2 или 3 задачи

‮ACx0
18.03.2017
19:22:26
потому что тебе нужен синхронный код
Мне (в этой задаче) действительно нужен синхронный код. Вот только ещё мне нужно использовать HttpClient, а у него синхронных методов нет.

‮ACx0
18.03.2017
19:22:45
Так я и полез в это всё.

Ilya
18.03.2017
19:23:08
UWP что ли? или Core?

‮ACx0
18.03.2017
19:23:24
Core

Ilya
18.03.2017
19:24:29
а какой тебе метод нужен от HttpClient?

‮ACx0
18.03.2017
19:24:51
Axm
18.03.2017
19:25:23
У нас там выше было на эту тему, ща поищу

Google
‮ACx0
18.03.2017
19:25:41
Axm
18.03.2017
19:26:34
Отсюда и ниже

‮ACx0
18.03.2017
19:26:42
Всё уже давно написано и работает, но, раз уж эти async есть, наверное, всё равно рано или поздно придётся их использовать, вот и пытаюсь понять.

var Response = Task.Run(async () => await HTTPClient.SendAsync(req).ConfigureAwait(false)).Result;

Ilya
18.03.2017
19:29:29
смотри, небольшое демо

var tasks = new List<Task?); for(int i =1;i<10;i++) { tasks.Add(Task.Delay(1000)); } Task.WhenAll(tasks).Wait();

вместо Prallel.For ты можешь просто насоздавать кучу тасков и потом дождаться из выполнения

этот код выполнится за 1 секунду

потому что таски будут выполняться параллельно

насколько я понимаю, ты хочешь выкачать какой то сайт или данные и хочешь это делать в много потоков

‮ACx0
18.03.2017
19:33:35
смотри, небольшое демо
Да, я знаю, что P.F. примерно то же делает, к этому вопросов вообще ноль.

Axm
18.03.2017
19:35:08
этот код выполнится за 1 секунду
Я может говорю хуйню, но разве в твоем коде таски не начинают выполняться по мере добавления в список задач? То есть при большем числе прохода цикла for к моменту вызова WhenAll часть из них уже будет завершена.

Axm
18.03.2017
19:36:39
да, конечно, но это совешенно не важно, потому что нам важен результат, а не что и когда выполнилось
Я к тому, что твое утверждение про секунду неверно и сбивает с толку.

Ilya
18.03.2017
19:37:15
хммм... возможно)

Axm
18.03.2017
19:37:16
Если задач будет много, не все они будут выполняться сразу и параллельно

‮ACx0
18.03.2017
19:37:44
У меня вопрос в общем о том, как работают async-методы и что с ними делать. Ну и что за муть с прыгающим управлением.

Google
‮ACx0
18.03.2017
19:40:24
Я к тому, что твое утверждение про секунду неверно и сбивает с толку.
Конкретно для меня тут сбивающего нет ничего, потому что я знаю о том, как работает каждая часть этого кода. И что ещё одна причина не выполниться этому за секунду - остуствие 10 логЯдер.

‮ACx0
18.03.2017
19:41:15
Ааа, что?

Ilya
18.03.2017
19:41:21
причём тут ядра?

ну вот ты его запутал(((

‮ACx0
18.03.2017
19:41:39
Ну а на чём их 10 одновременно запустить?

Ilya
18.03.2017
19:42:10
да там не создаётся вообще потоков!

Admin
ERROR: S client not available

Ilya
18.03.2017
19:42:21
эта штука работает на таймере системном

‮ACx0
18.03.2017
19:42:55
P.F. Мне пакетами(примерно) как раз и выдавал результат. Особенно первый, ровно по количеству ядер.

Ilya
18.03.2017
19:43:37
Paraller For работает на потоках а мой второй пример их не создаёт

Axm
18.03.2017
19:43:38
У меня вопрос в общем о том, как работают async-методы и что с ними делать. Ну и что за муть с прыгающим управлением.
Представь, что ты генерал двести лет назад и гоняешь своих адъютантов с поручениями. Первым делом ты сказал Ивану сгонять в другой штаб, спросить что-то важное. Когда он уехал на коне, ты можешь ждать пока он вернется, заставляя остальных адъютантов пыхтеть в прихожей (синхронный код) или принимать их, слушая ответы и давая им новые задания (асинхронный код).

‮ACx0
18.03.2017
19:43:52
да там не создаётся вообще потоков!
А потоки не в ThreadPool лежат? И по ним таски не распределяются? Или это в другом месте было?

‮ACx0
18.03.2017
19:44:29
вот этот код не создаст потоков
Хорошо, тогда, на всякий случай, что такое поток?

Ilya
18.03.2017
19:44:39
Thread

этот такая единица операционной системы

Google
Сергей
18.03.2017
19:46:30
Асинхронность != многопоточность

Ilya
18.03.2017
19:46:30
операционная система планирует выполнение потоков и преостанавливает их, чтобы дать выполниться другим

‮ACx0
18.03.2017
19:46:49
Асинхронность != многопоточность
Да, и хорошо бы понять что из них что.

Ilya
18.03.2017
19:47:20
И именно их количество не превышает количество ядер?
в случае Paraller.For - создаётся количество потоков по количеству логических ядер, в процессе их гораздо больше

Axm
18.03.2017
19:47:32
А не многопоточность ли это?
Многопоточность это когда у тебя (генерала) два или более рта и ты можешь говорить что делать сразу двум или более адъютантам

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

‮ACx0
18.03.2017
19:50:03
Если он не создаёт потоков, то как таски параллельно выполняются?

Ilya
18.03.2017
19:50:49
они выполнябтся асинхронно

а не многопоточно

Ilya
18.03.2017
19:51:30
последний столбец - количество потоков в одном процессе

Сергей
18.03.2017
19:52:34
‮ACx0
18.03.2017
19:52:36
они выполнябтся асинхронно
Но где они выполняются, если поток один?

Ilya
18.03.2017
19:53:05
Но где они выполняются, если поток один?
они не выполняются вообще, они просто преходят в завершенное состояние через некотоое время\

системый таймер переключит их через определенное время

Азимов
18.03.2017
19:54:13
Женич

Жения

‮ACx0
18.03.2017
19:54:24
они не выполняются вообще, они просто преходят в завершенное состояние через некотоое время\
Хорошо, а если в каждом запрос, на который сервер полминуты отвечает?

Страница 587 из 1888

Эта группа больше не существует Эта группа больше не существует