|
async await что я делаю не так?
|
|||
---|---|---|---|
#18+
fkthat, нет, я тебе предлагаю не возводить ничего в абсолют. и не ломать неокрепших умов. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.05.2021, 15:12 |
|
async await что я делаю не так?
|
|||
---|---|---|---|
#18+
fkthat, ну и если очень хочется официальной доки авторYou should not use ConfigureAwait when you have code after the await in the method that needs the context. For GUI apps, this includes any code that manipulates GUI elements, writes data-bound properties or depends on a GUI-specific type such as Dispatcher/CoreDispatcher. For ASP.NET apps, this includes any code that uses HttpContext.Current or builds an ASP.NET response, including return statements in controller actions. Figure 7demonstrates one common pattern in GUI apps—having an async event handler disable its control at the beginning of the method, perform some awaits and then re-enable its control at the end of the handler; the event handler can’t give up its context because it needs to re-enable its control. правда, твое "всегда" уже не всегда? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.05.2021, 15:18 |
|
async await что я делаю не так?
|
|||
---|---|---|---|
#18+
автор You should not use ConfigureAwait when you have code after the await in the method that needs the context. Удивишься, но это эквивалентно вызову ConfigureAwait(true) потому что оно по-дефолту. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.05.2021, 15:29 |
|
async await что я делаю не так?
|
|||
---|---|---|---|
#18+
winsky! правда, твое "всегда" уже не всегда? Можешь его не писать, лично тебе я разрешаю. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.05.2021, 15:30 |
|
async await что я делаю не так?
|
|||
---|---|---|---|
#18+
fkthat, ага. ну я понял. и ты тоже. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.05.2021, 15:32 |
|
async await что я делаю не так?
|
|||
---|---|---|---|
#18+
авторМожешь его не писать, лично тебе я разрешаю. я-то как раз пишу. где надо. где не надо - не пишу. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.05.2021, 15:38 |
|
async await что я делаю не так?
|
|||
---|---|---|---|
#18+
fkthat hVostt Честно говоря, не понимаю, почему эта фича не входит в коробку, я имею в виду глобальная настройка на уровне сборки. Ну так она через инструментацию сборки ведь работает? Если так, то логичнее было бы её тогда вообще в сам компилятор встроить. Примерно так это и работает, сначала компилируется, потом Fody вносит изменения прям в сборку, добавляя везде ConfigureAwait() ... |
|||
:
Нравится:
Не нравится:
|
|||
05.05.2021, 15:59 |
|
async await что я делаю не так?
|
|||
---|---|---|---|
#18+
winsky! я-то как раз пишу. где надо. где не надо - не пишу. Забей, я же тебе дал карт-бланш писать как хочешь. Будут проблемы, например, с ревью - скажи, что я уже одобрил. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.05.2021, 16:22 |
|
async await что я делаю не так?
|
|||
---|---|---|---|
#18+
fkthat Ты лезешь куда надо, только не с той стороны. Ну ЗБС теперь, его заблочили до того, как он мне объяснил с какой стороны лезть. Разблочьте плиз, пусть по теме то ответит, раз среди вас желающих нет... ... |
|||
:
Нравится:
Не нравится:
|
|||
06.05.2021, 01:17 |
|
async await что я делаю не так?
|
|||
---|---|---|---|
#18+
iskatelsql, Смотри. Забудь на время о потоках вообще. Нет их. (Имхо, кстати, чем до этого больше дела имел с "обычной" многопоточностью, тем сложнее может быть воткнуть в TPL). Есть только асинхронные методы/вызовы - это любые методы, которые возвращают объект Task. Task - это нечто, что рано или поздно перейдет либо в состояние "завершено успешно" либо "завершено с ошибкой". Единственный правильный способ отследить завершение таска это вызвать для него ContinueWith - он типа как цепляет на таск "обработчик события" для его (таска) завершения. И сам он в свою очередь возвращает таск, который означает "я завершусь когда завершится первый таск, а потом выполнится обработчик. Вот. Теперь, если писать достаточно сложный код таким образом (с ContinueWith) то получится громоздкая конструкция и цепочек этих ContinueWith и коллбеков, которые им передаются. Поэтому придумали конструкцию async/await, с которой все упрощается - если взять код наподобии такого: Код: c# 1. 2. 3. 4. 5. 6.
то, на самом деле, (отвлекаясь от мудреных деталей) компилятор просто превратит его во что-то схожее с: Код: c# 1. 2. 3. 4. 5.
Т.е. он просто вернет объект таск "завершусь тогда, когда завершится таск из BarAsync(), потом завершится таск из BazAsync(), а после этого завершится таск из BlaAsync()". Вот и все. Ты на самом деле никогда ничего не "ждешь завершения", а манипулируешь тасками цепляя явно или неявно на них коллбеки ContinueWith. Ну и есть еще готовые нужные утилиты для работы с тасками, например Task.WhenAll - таск который завершится сразу когда завершатся все переданные в него таски, или Task.WhenAny - завершится когда завершится хоть один из тасков, и еще другие - можешь посмотреть доки по TPL. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.05.2021, 21:32 |
|
async await что я делаю не так?
|
|||
---|---|---|---|
#18+
fkthat, так то, таск не обязан завершаться и может не завершаться вообще, но всё равно + в карму, что время не пожалел и всё расписал :) ... |
|||
:
Нравится:
Не нравится:
|
|||
12.05.2021, 21:39 |
|
async await что я делаю не так?
|
|||
---|---|---|---|
#18+
fkthat, У меня как раз проблема с тем, что таск порождает таск..., "каин породил авеля а авель.." и так далее. Как это безобразие прекратить то? Они на вызове требуют опять asinc. В одном из ответов предлагалось даже переделать майн в асинк static async Task Main(string[] args) . Есть у этой цепочки какой-то стопор? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2021, 02:30 |
|
async await что я делаю не так?
|
|||
---|---|---|---|
#18+
iskatelsql fkthat, У меня как раз проблема с тем, что таск порождает таск..., "каин породил авеля а авель.." и так далее. Как это безобразие прекратить то? Они на вызове требуют опять asinc. В одном из ответов предлагалось даже переделать майн в асинк static async Task Main(string[] args) . Есть у этой цепочки какой-то стопор? Нет, нету. Один из евангелистов async-await (Клири вроде как) уже сравнивал это с зомби-вирусом - если в одном месте кода это завелось, то оно неудержимо расползается по всему коду. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2021, 07:28 |
|
async await что я делаю не так?
|
|||
---|---|---|---|
#18+
iskatelsql Есть у этой цепочки какой-то стопор? А какая необходимость в этом самом "стопоре"? Зачем тебе вообще "ждать" таск - просто чтобы "ждать"? Ты делаешь просто Main асинхронным и возвращаешь из него некий "таск всех тасков" - а все остальное за тебя сделает фреймворк. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2021, 11:16 |
|
async await что я делаю не так?
|
|||
---|---|---|---|
#18+
Roman Mejtes таск не обязан завершаться и может не завершаться вообще Теоретически, это вполне может быть (например, если в нем тот же самый бесконечный цикл), но это все-таки не очень хороший таск, потому что он в итоге будет грубовато пришиблен при завершении приложения - по-хорошему для такого должна быть предусмотрена его "мягкая" остановка через CancellationToken. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2021, 13:39 |
|
async await что я делаю не так?
|
|||
---|---|---|---|
#18+
fkthat Имхо, кстати, чем до этого больше дела имел с "обычной" многопоточностью, тем сложнее может быть воткнуть в TPL) Вот тут Вы абсолютно правы!. Кидаю на форму кнопку, по ней запускаю поток, который живет своей жизнью и периодически опрашивает девайсы, кидая результаты на форму и в лог. Ума не приложу как завести такое тасками без потоков. Во всех примерах асинхронная операция это что-то временное - например запись на диск. fkfka А какая необходимость в этом самом "стопоре" Не в стопоре необходимость. Я не понимаю как асинхронность запустить постоянно, думаю в цикле... но чтоб начать следующий виток цикла нужно дождаться завершение предыдущего. ЗЫ. теперь совсем запутался. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.05.2021, 02:13 |
|
async await что я делаю не так?
|
|||
---|---|---|---|
#18+
iskatelsql Я не понимаю как асинхронность запустить постоянно, думаю в цикле... Вот так, что ли? Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
... |
|||
:
Нравится:
Не нравится:
|
|||
23.05.2021, 11:04 |
|
|
start [/forum/topic.php?fid=20&msg=40068624&tid=1398284]: |
0ms |
get settings: |
19ms |
get forum list: |
17ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
45ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
355ms |
get tp. blocked users: |
2ms |
others: | 14ms |
total: | 472ms |
0 / 0 |