powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / async / await and exception handling
25 сообщений из 51, страница 2 из 3
async / await and exception handling
    #39392849
mikron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttmikronЯ не люблю головоломок из области найди отличия

Обо всех отличиях было сказано выше, про async и метод расширения, про то, что task.Wait надо убрать я тоже писал. Не люблю повторяться, просто применил всё, что было сказано.

Про присваивание диалогу значения свойства, тоже написал, но можно и присвоить если очень хочется.

Я ещё не доконца разобрался как работает то что ты набросал, но есть замечания.
1. Убери исключение - диалог не закрывается после асинхронной обработки (слип).
Другое поведение.

2. Я уже сказал, по поводу
private async void button1_Click
Так делать нельзя. В принципе конечно можно, но работать будет не так как надо.
Другими словами, не приемлемо для меня. В примере я повесил это на обработчик события, в реалной жизни это синхронный метод, его менять нельзя, его завершения ждут.
...
Рейтинг: 0 / 0
async / await and exception handling
    #39392854
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mikron1. Убери исключение - диалог не закрывается после асинхронной обработки (слип).
Другое поведение.

Убрал. Закрывается.



mikron2. Я уже сказал, по поводу
private async void button1_Click
Так делать нельзя. В принципе конечно можно, но работать будет не так как надо.
Другими словами, не приемлемо для меня. В примере я повесил это на обработчик события, в реалной жизни это синхронный метод, его менять нельзя, его завершения ждут.

Если обработчик кнопки вызывает асинхронную операцию, то делать не просто можно, так делать нужно!

Может ты путаешь параллельные операции, которые надо исполнять в BackgroundWorker и асинхронные?
...
Рейтинг: 0 / 0
async / await and exception handling
    #39392879
mikron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttmikron1. Убери исключение - диалог не закрывается после асинхронной обработки (слип).
Другое поведение.

Убрал. Закрывается.

Давай угадаю, опят добавил
dialog.DialogResult = DialogResult.OK;
но умолчал

hVosttmikron2. Я уже сказал, по поводу
private async void button1_Click
Так делать нельзя. В принципе конечно можно, но работать будет не так как надо.
Другими словами, не приемлемо для меня. В примере я повесил это на обработчик события, в реалной жизни это синхронный метод, его менять нельзя, его завершения ждут.

Если обработчик кнопки вызывает асинхронную операцию, то делать не просто можно, так делать нужно!

Может ты путаешь параллельные операции, которые надо исполнять в BackgroundWorker и асинхронные?
Еще раз:
в тестовом примере есть кнопка, в реалной проблеме нету кнопки.
В тестовом примере метод называется
... button1_Click(object sender, EventArgs e)
в реалной проблеме метод называется
void makeSomeFunnyStuff()


Еще раз:
в тестовом примере есть кнопка, в реальной проблеме нету кнопки.
В тестовом примере метод называется
button1_Click(object sender, EventArgs e)
в реальной проблеме метод называется
void makeSomeFunnyStuff()
и в реалной проблеме метод должен быть синхронным.. Просто прими как ограничение.
...
Рейтинг: 0 / 0
async / await and exception handling
    #39392918
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>mikron, сегодня, 00:08 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1247548&msg=20151610] [20151610]

>...И твой this.ShowDialog() из ShowDialogAsync...

Посмотри здесь .

С уважением,
Владимир
...
Рейтинг: 0 / 0
async / await and exception handling
    #39392975
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mikronи в реалной проблеме метод должен быть синхронным.. Просто прими как ограничение.

Ну выполняй код тогда синхронно, без тасков и асинков.

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

Решай сам, что тебе нужно.
...
Рейтинг: 0 / 0
async / await and exception handling
    #39393026
mikron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttmikronи в реалной проблеме метод должен быть синхронным.. Просто прими как ограничение.

Ну выполняй код тогда синхронно, без тасков и асинков.

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

Решай сам, что тебе нужно.
Да не, я истины ради. Ты решил не мою задачу а похожую. Хороший спаринг партнёр нужен, иначе я застрял.

mikronИдея простая, по событию запускаем задачу на пуле задач для обработки действия. Пользователю показываю модалный диалог в котором отображаю прогресс. По завершению процесса закрываю диалог и выполнение идeт дальше. (синхронно)
Пытаюсь пременить async/await для разбиение поцесса на части.
...
Рейтинг: 0 / 0
async / await and exception handling
    #39393047
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mikronДа не, я истины ради. Ты решил не мою задачу а похожую. Хороший спаринг партнёр нужен, иначе я застрял.

Ну покажи проблему? У меня пока ни затыков, ни блокировок, всё работает :) Что сделать надо, чтобы всё сломалось?
...
Рейтинг: 0 / 0
async / await and exception handling
    #39393078
mikron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt,

Код: c#
1.
private void button1_Click(object sender, EventArgs e)
...
Рейтинг: 0 / 0
async / await and exception handling
    #39393198
refreg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mikron,

в асинхронном алгоритме должно быть два метода:
1) запускаем задачу и выходим.
2) обрабатываем завершение задачи.

Разложи свою задачу на два независимых метода. (У меня не получается разложить ее: из-за ShowDialog нельзя выйти из 1-го метода)

async/await просто помогают два метода соединить в один...
...
Рейтинг: 0 / 0
async / await and exception handling
    #39393261
mikron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt,

Вот так уже не работатет
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
        private async Task DoItNowAsync(Form dialog)
        {
            await Task.Run(() => { 
                // Thread.Sleep(2000);
                // throw new ApplicationException("Yep!");
                return true;
            });
            dialog.DialogResult = DialogResult.OK;
        }
    }

    public static class SomeExtensions
    {
        public static async Task<DialogResult> ShowDialogAsync(this Form @this)
        {
            await Task.Yield();   // !
            await Task.Yield();
            if (@this.IsDisposed)
                return DialogResult.OK;
            return @this.ShowDialog();
        }
    }


Но это же детали.

А вобще вопрос снимается т.к. в данном случае код который я привёл работатет как и ожидается, но повидение Студии странное: появляется окно о необработаном исклюцении и в последствии task.Wait как и ожидатется пробрасывает исключение.
Одно допонение.

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
        private async Task DoItNowAsync(Form dialog)
        {
            try
            {
                await Task.Run(() =>
                {
                    Thread.Sleep(2000);
                    throw new ApplicationException("Yep!");
                    return true;
                });
            }
            finally
            {
                dialog.DialogResult = DialogResult.OK;
            }
        }
...
Рейтинг: 0 / 0
async / await and exception handling
    #39393319
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mikronА вобще вопрос снимается т.к. в данном случае код который я привёл работатет как и ожидается, но повидение Студии странное: появляется окно о необработаном исклюцении и в последствии task.Wait как и ожидатется пробрасывает исключение.
Одно допонение.

Мне кажется, я даже уверен, ты используешь таски не по назначению.

mikron
Код: c#
1.
private async void button1_Click(object sender, EventArgs e)



Вот так правильно, если ты обрабатываешь асинхронную операцию. Не вериш? Можешь поспорить напрямую с разработчиками Microsoft, наверняка там сидят не далёкие люди
...
Рейтинг: 0 / 0
async / await and exception handling
    #39393383
mikron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttВот так правильно, если ты обрабатываешь асинхронную операцию.

С чего ты решил что моя операция асинхронна - не пойму. Я ещё раз повторю - мне надо синхронно.
И какие бы высоколобые люди в микрософте не сидели - они тоже не святые и от ошибок не обережены.

Страдая дальше вот чего получил.

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
        private void button1_Click(object sender, EventArgs e)
        {
            try
            {
                using (var dialog = new FormDialog())
                {
                    var task = Task.Run(() =>
                    {
                        Thread.Sleep(4000);
                        throw new ApplicationException("Yep!");
                        return true;
                    });
                    Task.WaitAny(task, Task.Delay(1000));   // This delay is required to prevent flickering (opening and closing dialog for a short operation)
                    if (!task.IsCompleted)
                    {
                        task.ContinueWith((_) => 
                            { 
                                dialog.DialogResult = DialogResult.OK; 
                            });
                        dialog.ShowDialog(this);
                        task.Wait();
                    }
                }
            }
            catch (Exception ex)
            {
                textBox1.Text = ex.ToString();
            }
        }
...
Рейтинг: 0 / 0
async / await and exception handling
    #39393403
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mikronС чего ты решил что моя операция асинхронна - не пойму. Я ещё раз повторю - мне надо синхронно.

Зачем синхронную операцию пытаться выполнить асинхронно? Ты бы как-то реальную задачу обозначил, чего ты пытаешься сделать, а не синтетические примеры с тасками и слипами.

mikronИ какие бы высоколобые люди в микрософте не сидели - они тоже не святые и от ошибок не обережены.

А по-конкретнее? Нашёл какие-то ошибки?


mikronСтрадая дальше вот чего получил.

Можешь сказать, зачем ты вообще пихаешь сюда Task.Run? Для чего?
...
Рейтинг: 0 / 0
async / await and exception handling
    #39393416
mikron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttmikronС чего ты решил что моя операция асинхронна - не пойму. Я ещё раз повторю - мне надо синхронно.

Зачем синхронную операцию пытаться выполнить асинхронно? Ты бы как-то реальную задачу обозначил, чего ты пытаешься сделать, а не синтетические примеры с тасками и слипами.


Операция синхронна, но надо дать пользователю информацию что программа не подвисла а какй-нибудь прогросс идикатор.
20107068



hVosttmikronИ какие бы высоколобые люди в микрософте не сидели - они тоже не святые и от ошибок не обережены.
А по-конкретнее? Нашёл какие-то ошибки?

Ты аргументировал свой позицию не фактами а авторитетом. Это указание на несостоятелность аргумента.
20154452


hVosttМожешь сказать, зачем ты вообще пихаешь сюда Task.Run? Для чего?
Очевидно, запись файла операция не быстрая. Вобще всё это описал в первом посте
mikronИдея простая, по событию запускаем задачу на пуле задач для обработки действия. Пользователю показываю модалный диалог в котором отображаю прогресс. По завершению процесса закрываю диалог и выполнение идют дальше.

Есть идея лутше?
...
Рейтинг: 0 / 0
async / await and exception handling
    #39393420
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mikronЕсть идея лутше?
Может, не мучиться, и сделать всё вышеописанное с помощью BackgroundWorker'а? (всё равно ведь винформс).
...
Рейтинг: 0 / 0
async / await and exception handling
    #39393427
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mikronОперация синхронна, но надо дать пользователю информацию что программа не подвисла а какй-нибудь прогросс идикатор.

В чём проблема:

а) сначала показать диалог, затем запустить операцию
б) запустить операцию в BackgroundWorker и показывать прогресс бар?

Задача стара как мир, за каким дедушкой, объясни мне пожалуйста, тут понадобились таски?
Уже который раз задаю один и тот же вопрос.

mikronТы аргументировал свой позицию не фактами а авторитетом. Это указание на несостоятелность аргумента.

Не авторитетом, а первоисточником. Ты перепутал эти понятия и сделал неправильные выводы.


mikronОчевидно, запись файла операция не быстрая. Вобще всё это описал в первом посте

Запись файла — асинхронная операция. Но судя по всему, раз ты даже таких элементарных вещей не знаешь, о чём мы вообще тогда разговариваем? Если для тебя документация Microsoft «не авторитет», видимо поэтому ты не знаешь таких вещей.

В общем, всё ясно.
...
Рейтинг: 0 / 0
async / await and exception handling
    #39393429
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры ПавловныmikronЕсть идея лутше?
Может, не мучиться, и сделать всё вышеописанное с помощью BackgroundWorker'а? (всё равно ведь винформс).

К сожалению, бэкграунд воркер это унылое поделие какой-то авторитетной шишки, ей доверять нельзя, надо всё делать наоборот
...
Рейтинг: 0 / 0
async / await and exception handling
    #39393499
mikron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttmikronОперация синхронна, но надо дать пользователю информацию что программа не подвисла а какй-нибудь прогросс идикатор.

В чём проблема:

а) сначала показать диалог, затем запустить операцию
б) запустить операцию в BackgroundWorker и показывать прогресс бар?

Задача стара как мир, за каким дедушкой, объясни мне пожалуйста, тут понадобились таски?
Уже который раз задаю один и тот же вопрос.

Что то совсем плох стал. Вопрос задаёшь второй раз. Я надеялся ответ очевиден, но видно за отсутствием опыта не для тебя.
Ответ: решение моей задачи элегантно, эффективно, компактно.
Для проверки: Повтори моё решение предложным тобой методом. Посчитай количество строчек кода. выложи сюда и мы вместе сравним.

hVosttmikronТы аргументировал свой позицию не фактами а авторитетом. Это указание на несостоятелность аргумента.

Не авторитетом, а первоисточником. Ты перепутал эти понятия и сделал неправильные выводы.


Любая попытка аргументировать ссылкой на мнения других людей говорит только о том что своих аргументов у тебя уже нет.
Аргумент опять глупый: первоисточники утверждали земля круглая.


hVosttmikronОчевидно, запись файла операция не быстрая. Вобще всё это описал в первом посте

Запись файла — асинхронная операция. Но судя по всему, раз ты даже таких элементарных вещей не знаешь, о чём мы вообще тогда разговариваем? Если для тебя документация Microsoft «не авторитет», видимо поэтому ты не знаешь таких вещей.

Это чушь, ты и сам догадываешся наверно.

Ты пытаешься обвинить меня в некомпетентности и дискредитировать как оппонента.
Это показывает снова отсутсвие аргументов по делу и делает тебя только крикуном.
Это не мой уровень. Хочешь продолжит дискусию, давай по теме. Повтори решение предложным тобой методом.
...
Рейтинг: 0 / 0
async / await and exception handling
    #39393519
refreg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mikron,

mikron,

И все-таки ContinueWith
а то async... await...

ЗЫ. Зачeм Тask.Wait? Задача в твоем коде будет гарантировано завершена. На всякий случай?
...
Рейтинг: 0 / 0
async / await and exception handling
    #39393527
mikron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
refregmikron,

mikron,

И все-таки ContinueWith
а то async... await...

ЗЫ. Зачeм Тask.Wait? Задача в твоем коде будет гарантировано завершена. На всякий случай?
Получается так. Тask.Wait нужен для проброса исключения.
...
Рейтинг: 0 / 0
async / await and exception handling
    #39393537
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mikronЭто чушь, ты и сам догадываешся наверно.

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


mikronЭто не мой уровень. Хочешь продолжит дискусию, давай по теме. Повтори решение предложным тобой методом.

Мне зачем это? Твоя задача, я тебе дал рабочее решение. Дальше сам борись со своими тараканами.
...
Рейтинг: 0 / 0
async / await and exception handling
    #39393540
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mikronЛюбая попытка аргументировать ссылкой на мнения других людей говорит только о том что своих аргументов у тебя уже нет.
Аргумент опять глупый: первоисточники утверждали земля круглая.

Просто невероятной тупизны ахинея.
...
Рейтинг: 0 / 0
async / await and exception handling
    #39393552
refreg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mikronПолучается так. Тask.Wait нужен для проброса исключения.Ясно. Но обработку вроде логичнее делать именно в ContinueWith коде. Там для этого спец.механизмы есть.
Получается что исключение произошло, и мы ждем закрытия диалогового окна, что бы его пробросить.
Ну, пусть так... Сделаем скидку, что пример для демонстрации
...
Рейтинг: 0 / 0
async / await and exception handling
    #39393554
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>mikron, сегодня, 18:11 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1247548&msg=20154719][20154719]
>...Страдая дальше вот чего получил...

А если так:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
    private void button1_Click(object sender, EventArgs e)    {
      fAsync();
    }
    private void fAsync() {
        FormDialog dialog = new FormDialog();   
        BeginInvoke((Action)(() => dialog.ShowDialog(this)));
        
        //await Task.Run(new Action(fTask));
        var task = Task.Run<string>(() => fTask());
        task.Wait();
        dialog.Close();
      
      //-- task.Rezult
      //-- switch
      . . . 
    }
    private string fTask() {
       Thread.Sleep(4000);
       return "Yep!";
    }



Не знаю смысла задачи и не совсем понимаю зачем:
throw new ApplicationException("Yep!");

С уважением,
Владимир
...
Рейтинг: 0 / 0
async / await and exception handling
    #39393679
romangr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mikron, Если я правильно понял, нужно это:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
        
        private void button1_Click(object sender, EventArgs e)
        {
            try
            {
                using (var dialog = new DialogForm())
                {
                    var task = RunLengthyAction(dialog);
                    dialog.ShowDialog(this);
                    task.Wait();
                }
            }
            catch (Exception ex)
            {
                textBox1.Text = ex.ToString();
            }
        }

        private Task RunLengthyAction(Form dialog)
        {
            return Task.Run(() =>
            {
                try
                {
                    // some lengthy operation
                    Thread.Sleep(3000);
                    throw new InvalidOperationException();
                }
                finally
                {
                    // BeginInvoke, because of showdialog has its own message loop
                    BeginInvoke((Action) (() => {
                        dialog.DialogResult = DialogResult.OK;
                    }));
                }
            });
        }
...
Рейтинг: 0 / 0
25 сообщений из 51, страница 2 из 3
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / async / await and exception handling
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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