|
Зачем нужен await?
|
|||
---|---|---|---|
#18+
hVosttКак заставить компилятор вставлять ConfigureAwait(false) для всех await вызовов в рамках модуля, или хотя бы файла? :)замена в исходниках по регулярке ))) ... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2018, 11:29 |
|
Зачем нужен await?
|
|||
---|---|---|---|
#18+
hVosttShocker.Proпропущено... Моветон, но он не запрещен, и в существующих проектах может присутствовать. Кроме того, это способ использовать await в обработчиках событий. Будем говорить честно, такая возможность "оставлена" только из-за обработчиков событий :)нет. У меня проект, где я в цикле делаю await и результат мне нужен без Task<... ... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2018, 11:39 |
|
Зачем нужен await?
|
|||
---|---|---|---|
#18+
hVosttСледующий вопрос, может кто решал. Как заставить компилятор вставлять ConfigureAwait(false) для всех await вызовов в рамках модуля, или хотя бы файла? :)Да никак. Но можно локально убить контекст синхронизации. Код: c# 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2018, 11:39 |
|
Зачем нужен await?
|
|||
---|---|---|---|
#18+
Petro123hVosttпропущено... Будем говорить честно, такая возможность "оставлена" только из-за обработчиков событий :)нет. У меня проект, где я в цикле делаю await и результат мне нужен без Task<...причем тут результат и void??? Так или иначе ты можешь запустить метод с таском без ожидания результата, для этого тебе void необязателен. Как правильно говорит Хвост, void оставлен только для сохранения сигнатуры для событий ... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2018, 11:43 |
|
Зачем нужен await?
|
|||
---|---|---|---|
#18+
Алексей КДа никак. Но можно локально убить контекст синхронизации. Код: c# 1. 2. 3. 4.
Ну это понятно. В общем, тут очевидно, что сделали слегка по-дебильному. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2018, 11:50 |
|
Зачем нужен await?
|
|||
---|---|---|---|
#18+
hVosttВ общем, тут очевидно, что сделали слегка по-дебильному.Слегка - не то слово! ... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2018, 11:54 |
|
Зачем нужен await?
|
|||
---|---|---|---|
#18+
Shocker.Pro, Ты про то чтобы убрать слово void тут? private async void MyRun() Ну, это и коню понятно что не надо трогать. Чтобы убрать await я тоже против. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2018, 11:56 |
|
Зачем нужен await?
|
|||
---|---|---|---|
#18+
hVostt, Ещё камень в авторов ConfigureAwait . ... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2018, 12:01 |
|
Зачем нужен await?
|
|||
---|---|---|---|
#18+
Алексей КhVostt, Ещё камень в авторов ConfigureAwait . Согласен. Если ты пишешь библиотеки, задолбаешься писать ConfigureAwait(false). Но сейчас решили это так, в ASP.NET Core вообще убрали контекст синхронизации ... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2018, 12:03 |
|
Зачем нужен await?
|
|||
---|---|---|---|
#18+
hVosttНо сейчас решили это так, в ASP.NET Core вообще убрали контекст синхронизации Ну да. HttpContext.Current там нет, а значит и контекст синхронизации там ни к чему. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2018, 12:06 |
|
Зачем нужен await?
|
|||
---|---|---|---|
#18+
Библиотеки все таки не часто пишем. А core пока ещё не ГУИ. Так что пока не наезжайте на сабж) сильно. )) ... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2018, 12:09 |
|
Зачем нужен await?
|
|||
---|---|---|---|
#18+
hVosttСогласен. Если ты пишешь библиотеки, задолбаешься писать ConfigureAwait(false). Но сейчас решили это так, в ASP.NET Core вообще убрали контекст синхронизации Но временнЫе затраты на переключение контекста ведь никто не отменял... ... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2018, 12:13 |
|
Зачем нужен await?
|
|||
---|---|---|---|
#18+
Shocker.ProhVosttСогласен. Если ты пишешь библиотеки, задолбаешься писать ConfigureAwait(false). Но сейчас решили это так, в ASP.NET Core вообще убрали контекст синхронизации Но временнЫе затраты на переключение контекста ведь никто не отменял... Никто не отменял, поэтому ConfigureAwait(false) приходится втыкать. Ещё есть такая штукенция https://github.com/Fody/ConfigureAwait Но такие вещи нужно применять с осторожностью. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2018, 12:19 |
|
Зачем нужен await?
|
|||
---|---|---|---|
#18+
Shocker.ProhVosttКак заставить компилятор вставлять ConfigureAwait(false) для всех await вызовов в рамках модуля, или хотя бы файла? :)замена в исходниках по регулярке ))) У нас есть Roslyn ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2018, 14:20 |
|
Зачем нужен await?
|
|||
---|---|---|---|
#18+
Алексей КhVostt, Ещё камень в авторов ConfigureAwait . Это далеко не все тараканы https://www.infoworld.com/article/2960463/application-development/my-two-cents-on-synchronizationcontext-async-and-await.html ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2018, 11:40 |
|
Зачем нужен await?
|
|||
---|---|---|---|
#18+
Не та ссылка - https://blogs.msdn.microsoft.com/pfxteam/2012/06/15/executioncontext-vs-synchronizationcontext/ ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2018, 11:44 |
|
Зачем нужен await?
|
|||
---|---|---|---|
#18+
Изопропил, Есть такой онекдот. Доктор, почему когда я сильно заворачиваю руку за спину, сгибаюсь и прыгаю на одной ноге, через какое-то время мне становится больно? Не делайте так. И вот, пример, который я ждал с самого начала статьи: Код: c# 1. 2. 3. 4. 5. 6. 7. 8.
Дядька делает неправильно, создаёт зачем-то для асинхронной операции задачу из пула, в ней после асинхронной операции выполняет сложную вычислительную операцию, думая что она также выполнится асинхронно, но очевидно будет выполняться в UI-потоке, так как для продолжения требуется контекст синхронизации, и ждёт чуда. И так многие делают. Вот два решения проблемы: 1. заставим наш говнокод работать Код: c# 1. 2. 3. 4. 5. 6. 7. 8.
2. включим мозг и напишем по-людски Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
Глобально решают задачу, отказываюсь от контекста синхронизации совсем. Остаётся execution flow, и с блокировками нужно по-аккуратнее. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2018, 14:09 |
|
Зачем нужен await?
|
|||
---|---|---|---|
#18+
Ещё в примере есть небольшой косячок, надо так :) Код: c# 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2018, 14:12 |
|
Зачем нужен await?
|
|||
---|---|---|---|
#18+
hVostt Код: c# 1.
почему Task - это ж эвентхендлер? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2018, 14:35 |
|
Зачем нужен await?
|
|||
---|---|---|---|
#18+
hVosttДядька делает неправильно, создаёт зачем-то для асинхронной операции задачу из пула, в ней после асинхронной операции выполняет сложную вычислительную операцию, думая что она также выполнится асинхронно, но очевидно будет выполняться в UI-потоке, так как для продолжения требуется контекст синхронизации, и ждёт чуда.Придется показать себя неучем. Почему Compute будет выполняться в UI потоке (без ConfigureAwait(false)), если мы до этого уже эвеитим задачу, в которой должен быть выполнен делегат, то есть он уже как бы начал выполняться не в потоке UI, и возврат из DownloadAsync должен быть не в поток UI, а в поток, в котором выполняется задача из пула. Или я где-то недопонял с возвратом. (( ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2018, 14:42 |
|
Зачем нужен await?
|
|||
---|---|---|---|
#18+
hVosttДядька делает неправильно, создаёт зачем-то для асинхронной операции задачу из пула, в ней после асинхронной операции выполняет сложную вычислительную операцию, думая что она также выполнится асинхронно, но очевидно будет выполняться в UI-потоке, так как для продолжения требуется контекст синхронизации, и ждёт чуда. Наверное правильней будет сказать, что UI-поток будет ждать завершения выполнения задачи, которая будет выполняться все же в своем потоке, нет? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2018, 14:43 |
|
Зачем нужен await?
|
|||
---|---|---|---|
#18+
Shocker.Pro, опередили))) ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2018, 14:44 |
|
Зачем нужен await?
|
|||
---|---|---|---|
#18+
Shocker.Proпочему Task - это ж эвентхендлер? да, void, но всё равно async )) давненько за десктоп не брался ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2018, 15:29 |
|
Зачем нужен await?
|
|||
---|---|---|---|
#18+
hVostt Код: c# 1.
Можно так: Compute(){ ....... Action a = () => метод в гуи } ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2018, 15:30 |
|
Зачем нужен await?
|
|||
---|---|---|---|
#18+
Shocker.ProПридется показать себя неучем. Почему Compute будет выполняться в UI потоке (без ConfigureAwait(false)), если мы до этого уже эвеитим задачу, в которой должен быть выполнен делегат, то есть он уже как бы начал выполняться не в потоке UI, и возврат из DownloadAsync должен быть не в поток UI, а в поток, в котором выполняется задача из пула. Или я где-то недопонял с возвратом. (( там же await, который не блокирует поток. ContinueAwait(false) позволяет выполнить оставшуюся часть метода любым из свободных потоков, даже тем, который был использован для запуска задачи. главное понимать, что Task это не поток. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2018, 15:40 |
|
|
start [/forum/topic.php?fid=20&msg=39684325&tid=1399271]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
143ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
54ms |
get tp. blocked users: |
1ms |
others: | 13ms |
total: | 252ms |
0 / 0 |