powered by simpleCommunicator - 2.0.29     © 2024 Programmizd 02
Map
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / async await что я делаю не так?
17 сообщений из 67, страница 3 из 3
async await что я делаю не так?
    #40068600
winsky!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat,

нет, я тебе предлагаю не возводить ничего в абсолют.
и не ломать неокрепших умов.
...
Рейтинг: 0 / 0
async await что я делаю не так?
    #40068604
winsky!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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.

правда, твое "всегда" уже не всегда?
...
Рейтинг: 0 / 0
async await что я делаю не так?
    #40068610
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор
You should not use ConfigureAwait when you have code after the await in the method that needs the context.

Удивишься, но это эквивалентно вызову ConfigureAwait(true) потому что оно по-дефолту.
...
Рейтинг: 0 / 0
async await что я делаю не так?
    #40068612
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
winsky!
правда, твое "всегда" уже не всегда?

Можешь его не писать, лично тебе я разрешаю.
...
Рейтинг: 0 / 0
async await что я делаю не так?
    #40068613
winsky!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat,

ага. ну я понял. и ты тоже.
...
Рейтинг: 0 / 0
async await что я делаю не так?
    #40068617
winsky!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторМожешь его не писать, лично тебе я разрешаю.
я-то как раз пишу. где надо. где не надо - не пишу.
...
Рейтинг: 0 / 0
async await что я делаю не так?
    #40068624
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat
hVostt
Честно говоря, не понимаю, почему эта фича не входит в коробку, я имею в виду глобальная настройка на уровне сборки.

Ну так она через инструментацию сборки ведь работает? Если так, то логичнее было бы её тогда вообще в сам компилятор встроить.


Примерно так это и работает, сначала компилируется, потом Fody вносит изменения прям в сборку, добавляя везде ConfigureAwait()
...
Рейтинг: 0 / 0
async await что я делаю не так?
    #40068634
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
winsky!
я-то как раз пишу. где надо. где не надо - не пишу.

Забей, я же тебе дал карт-бланш писать как хочешь. Будут проблемы, например, с ревью - скажи, что я уже одобрил.
...
Рейтинг: 0 / 0
async await что я делаю не так?
    #40068685
iskatelsql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat
Ты лезешь куда надо, только не с той стороны.

Ну ЗБС теперь, его заблочили до того, как он мне объяснил с какой стороны лезть.

Разблочьте плиз, пусть по теме то ответит, раз среди вас желающих нет...
...
Рейтинг: 0 / 0
async await что я делаю не так?
    #40069779
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iskatelsql,

Смотри. Забудь на время о потоках вообще. Нет их. (Имхо, кстати, чем до этого больше дела имел с "обычной" многопоточностью, тем сложнее может быть воткнуть в TPL). Есть только асинхронные методы/вызовы - это любые методы, которые возвращают объект Task. Task - это нечто, что рано или поздно перейдет либо в состояние "завершено успешно" либо "завершено с ошибкой". Единственный правильный способ отследить завершение таска это вызвать для него ContinueWith - он типа как цепляет на таск "обработчик события" для его (таска) завершения. И сам он в свою очередь возвращает таск, который означает "я завершусь когда завершится первый таск, а потом выполнится обработчик. Вот. Теперь, если писать достаточно сложный код таким образом (с ContinueWith) то получится громоздкая конструкция и цепочек этих ContinueWith и коллбеков, которые им передаются. Поэтому придумали конструкцию async/await, с которой все упрощается - если взять код наподобии такого:

Код: c#
1.
2.
3.
4.
5.
6.
async Task FooAsync()
{
    await BarAsync();
    await BazAsync();
    await BlaAsync();
}



то, на самом деле, (отвлекаясь от мудреных деталей) компилятор просто превратит его во что-то схожее с:

Код: c#
1.
2.
3.
4.
5.
Task FooAsync()
{
    return BarAsync()
       .ContinueWith(() => BazAsync())
       .ContinueWith(() => BlaAsync());



Т.е. он просто вернет объект таск "завершусь тогда, когда завершится таск из BarAsync(), потом завершится таск из BazAsync(), а после этого завершится таск из BlaAsync()". Вот и все. Ты на самом деле никогда ничего не "ждешь завершения", а манипулируешь тасками цепляя явно или неявно на них коллбеки ContinueWith. Ну и есть еще готовые нужные утилиты для работы с тасками, например Task.WhenAll - таск который завершится сразу когда завершатся все переданные в него таски, или Task.WhenAny - завершится когда завершится хоть один из тасков, и еще другие - можешь посмотреть доки по TPL.
...
Рейтинг: 0 / 0
async await что я делаю не так?
    #40069781
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat,

так то, таск не обязан завершаться и может не завершаться вообще, но всё равно + в карму, что время не пожалел и всё расписал :)
...
Рейтинг: 0 / 0
async await что я делаю не так?
    #40072121
iskatelsql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat,

У меня как раз проблема с тем, что таск порождает таск..., "каин породил авеля а авель.." и так далее. Как это безобразие прекратить то? Они на вызове требуют опять asinc. В одном из ответов предлагалось даже переделать майн в асинк static async Task Main(string[] args) . Есть у этой цепочки какой-то стопор?
...
Рейтинг: 0 / 0
async await что я делаю не так?
    #40072126
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iskatelsql
fkthat,

У меня как раз проблема с тем, что таск порождает таск..., "каин породил авеля а авель.." и так далее. Как это безобразие прекратить то? Они на вызове требуют опять asinc. В одном из ответов предлагалось даже переделать майн в асинк static async Task Main(string[] args) . Есть у этой цепочки какой-то стопор?

Нет, нету. Один из евангелистов async-await (Клири вроде как) уже сравнивал это с зомби-вирусом - если в одном месте кода это завелось, то оно неудержимо расползается по всему коду.
...
Рейтинг: 0 / 0
async await что я делаю не так?
    #40072145
fkfka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
iskatelsql
Есть у этой цепочки какой-то стопор?

А какая необходимость в этом самом "стопоре"? Зачем тебе вообще "ждать" таск - просто чтобы "ждать"? Ты делаешь просто Main асинхронным и возвращаешь из него некий "таск всех тасков" - а все остальное за тебя сделает фреймворк.
...
Рейтинг: 0 / 0
async await что я делаю не так?
    #40072163
fkfka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Roman Mejtes
таск не обязан завершаться и может не завершаться вообще

Теоретически, это вполне может быть (например, если в нем тот же самый бесконечный цикл), но это все-таки не очень хороший таск, потому что он в итоге будет грубовато пришиблен при завершении приложения - по-хорошему для такого должна быть предусмотрена его "мягкая" остановка через CancellationToken.
...
Рейтинг: 0 / 0
async await что я делаю не так?
    #40072249
iskatelsql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat
Имхо, кстати, чем до этого больше дела имел с "обычной" многопоточностью, тем сложнее может быть воткнуть в TPL)


Вот тут Вы абсолютно правы!. Кидаю на форму кнопку, по ней запускаю поток, который живет своей жизнью и периодически опрашивает девайсы, кидая результаты на форму и в лог.

Ума не приложу как завести такое тасками без потоков. Во всех примерах асинхронная операция это что-то временное - например запись на диск.

fkfka
А какая необходимость в этом самом "стопоре"


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

ЗЫ. теперь совсем запутался.
...
Рейтинг: 0 / 0
async await что я делаю не так?
    #40072269
fkfka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
iskatelsql
Я не понимаю как асинхронность запустить постоянно, думаю в цикле...


Вот так, что ли?

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
public async Task LoopAsync()
{
    for(var i = 0; i < 100500; i++)
    {
        await DoSomethingAsync(i);
    }
}

public async Task DoSomethingAsync(int i)
{
    await Console.Out.WriteLineAsync($"Hello from #{i}");
}
...
Рейтинг: 0 / 0
17 сообщений из 67, страница 3 из 3
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / async await что я делаю не так?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]