powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / C# async... await
317 сообщений из 317, показаны все 13 страниц
C# async... await
    #39572254
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Коллеги, помогите разобраться.
Разрабатываю приложения работы с базой данных Oracle.
Запросы могут быть долгоиграющими, поэтому на время его выполнения подключаю таймер и отражаю время в прогресс баре.
- Ситуация 1: здесь и далее - await wsp.Entity_SP(ИмяХП, sp, asp, RowToEntity);- вызов хранимой процедуры
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
      . . .
      при.tmrStart(); //-- Пуск таймера 
      try { await wsp.Entity_SP(ИмяХП, sp, asp, RowToEntity); }
      catch (System.InvalidOperationException ex) { throw new Exception(ex.Message); }
      catch (Exception ex) {
        при.tmrStop();
        MessageBox.Show(ex.Message, caption_Entity, MessageBoxButton.OK);
        bl_Разрешение = true;     //-- Разрешение выполнения функционала компонент
        return;
      }
      при.tmrStop();  //-- Останов таймера
      . . .

======= ПрогрессБар не работает.

- Ситуация 2:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
      . . .
      при.tmrStart(); //-- Пуск таймера 
      await Task.Run(() => wsp.Entity_SP(ИмяХП, sp, asp, RowToEntity));
      if (wsp.wspErr != null) {
        при.tmrStop();
        MessageBox.Show(wsp.wspErr, caption_Entity, MessageBoxButton.OK);
        bl_Разрешение = true;     //-- Разрешение выполнения функционала компонент
        return;
      }
      при.tmrStop();
      . . .

======= ПрогрессБар штатно.

Дискуссия состоялась здесь
...
Рейтинг: 0 / 0
C# async... await
    #39572272
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев,
дружище, ты и сам можешь половину работы сделать.
Прогресс не работает когда нет потока.
Включаем отладку и идём по шагам по строчкам. Если есть поток, то всё нормально. Если нет, то пишем сюда и смотрим где ты его стартовать должен.
Окно потоков: Debug - Window - ...
...
Рейтинг: 0 / 0
C# async... await
    #39572276
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев,
ну и можно сделать круче - не включать прогрессбар, пусть хранимка в фоне работает. Сделает - доложит).
РазДисаблишь контрол какой нить.
...
Рейтинг: 0 / 0
C# async... await
    #39572284
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев
Код: c#
1.
await Task.Run(() => wsp.Entity_SP(ИмяХП, sp, asp, RowToEntity));



это что, извините, за лютейший пздц?
какой асинк-эвейт здесь?
боржоми водкой запивай, чтобы не било по печени!

и это ещё что. прогресс бар на выполнение запросов? wat?! мдахх...
...
Рейтинг: 0 / 0
C# async... await
    #39572287
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttи это ещё что. прогресс баресли помнишь, он у него бесконечный туда-сюда).
хо-зя́-ин — ба́-рин.
...
Рейтинг: 0 / 0
C# async... await
    #39572336
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>hVostt, сегодня, 20:53 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1280515&msg=21046939] [21046939]
>это что, извините, за лютейший пздц?
это здесь .

>и это ещё что. прогресс бар на выполнение запросов? wat?! мдахх...
на слайде, в низу окна, зеленая полоска.
...
Рейтинг: 0 / 0
C# async... await
    #39572345
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеевна слайде, в низу окна, зеленая полоска.
ну, тогда нормально по дизайну.
С остальным то что?
Основной вопрос не прогрессе ведь был.
...
Рейтинг: 0 / 0
C# async... await
    #39572356
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеевэто здесь .

никакой работы в вашем таске не выполняется, только синхронное ожидание выполнения запроса в отдельно выделенном потоке.

хотя в том треде об этом неоднократно говорилось. наверное какие-то проблемы с усвоением информации.


ВМоисеевна слайде, в низу окна, зеленая полоска.

по какому принципу "зелёная полоска" заполняется? по коду вы не получаете информации о прогрессе.
...
Рейтинг: 0 / 0
C# async... await
    #39572363
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttнаверное какие-то проблемы с усвоением информации
дипломат))
hVosttпо какому принципу "зелёная полоска" заполняется? по коду вы не получаете информации о прогрессе.
Иван Иваныч!
Бесконечный прогрессбар когда чем ближе к концу тем медленнее.
(предположение)
...
Рейтинг: 0 / 0
C# async... await
    #39572365
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев>hVostt, сегодня, 20:53 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1280515&msg=21046939] [21046939]
>это что, извините, за лютейший пздц?
это здесь .

>и это ещё что. прогресс бар на выполнение запросов? wat?! мдахх...
на слайде, в низу окна, зеленая полоска.

надо прогресс сверху, тогда хорошо показывается :)
...
Рейтинг: 0 / 0
C# async... await
    #39572367
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>hVostt, сегодня, 23:15 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1280515&msg=21047202] [21047202]
>никакой работы в вашем таске не выполняется...
Вы не правы:
Код: 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.
    . . .
    //-- Выполнение хранимой процедуры
    public static void Entity_SP(string spname, dlg_sp sp, OracleParameter[] asp, dlg_RowToEntity RowToEntity) {
      nRow = 0;  //-- Число строк в выборке
      reader = null;
      wspErr = null;

      try {
        using (OracleConnection connection = new OracleConnection(гп.str_Соединение)) {
          connection.Open();
          OracleCommand command = new OracleCommand("", connection);
          command.Parameters.Clear();
          command.Parameters.AddRange(asp);
          command.CommandText = spname;
          command.CommandType = CommandType.StoredProcedure;

          using (reader = (OracleDataReader)command.ExecuteReader()) {
            //-- Формируем коллекцию из выборки
            sp(RowToEntity); //-- Обратный вызов
          }
        }
      }
      catch (Exception ex){ wspErr = ex.Message; }
    }
    . . .



>по какому принципу "зелёная полоска" заполняется? по коду вы не получаете информации о прогрессе.
Практически определяется некий максимальный интервал выполнения самого длинного запроса для конкретного компьютера сети + гак и эта величина входит а настройки конкретного компа.
...
Рейтинг: 0 / 0
C# async... await
    #39572368
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев,

и где же этот код?
...
Рейтинг: 0 / 0
C# async... await
    #39572370
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>ViPRos, сегодня, 23:41 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1280515&msg=21047240][21047240]
>надо прогресс сверху, тогда хорошо показывается :)
Спасибо, завтра попробую
...
Рейтинг: 0 / 0
C# async... await
    #39572371
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRos,

по тику что ли?
...
Рейтинг: 0 / 0
C# async... await
    #39572373
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев,

ээ, ты чего? я первый раз себе позволил пошутить

await нифига не делает в первом случае
...
Рейтинг: 0 / 0
C# async... await
    #39572375
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да и во втором тоже
делай через бакгроундворкер
...
Рейтинг: 0 / 0
C# async... await
    #39572376
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>ViPRos, сегодня, 23:44 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1280515&msg=21047245] [21047245]
>и где же этот код?
Вы об этом?
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
    //-- Показ ожидания в ProgressBar-е
    private void dpt_Tick(object sender, EventArgs e) {
      iPgbFrm++;
      if (iPgbFrm < 2) return; //-- Ожидание менее 3 секунд ещё комфортно
      if (iPgbFrm == 2) { //-- С 3-ей секунды ожидания покажем ProgressBar
        pgbWin.Visibility = Visibility.Visible;
        pgbWin.Value = iPgbFrm;
        return;
      }
      pgbWin.Value = iPgbFrm % гп.tm_Запрос + 1;
    }


где:
pgbWin - ПрогрессБар
iPgbFrm - счетчик секунд
гп.tm_Запрос - максимальная величина
...
Рейтинг: 0 / 0
C# async... await
    #39572377
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев,

Код: 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.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
            if (wk == null)
            {
                wk = new BackgroundWorker();
                wk.WorkerReportsProgress = true;
                wk.WorkerSupportsCancellation = true;

                wk.DoWork += (s, w) =>
                {
                    BackgroundWorker sw = s as BackgroundWorker;
                    if (Disposing || IsDisposed) sw.CancelAsync();
                    else
                    {
                        if ((onLoad && main.refreshDataOnLoad && !strTreeHasDS) || !onLoad)
                        {
                            if (isMacro)
                            {
                                if (main.modelParallelFillMode) main.FillModelParallel(typename, typeid, contextId, macroid, true, !lazyLoading, macroTypeFilters, true, DS, sw);
                                else main.FillModelSeq(typename, typeid, contextId, macroid, true, !lazyLoading, macroTypeFilters, true, DS, sw);
                            }
                            else main.LoadAndFillMacroType(name, contextId, true);
                        }
                    }

                    if (sw.CancellationPending) w.Cancel = true;
                };

                wk.ProgressChanged += (s, w) =>
                {
                    if (Disposing || IsDisposed) (s as BackgroundWorker).CancelAsync();
                    else
                    {
                        if ((int)w.UserState == 1) pb.Increment(1);
                        else pb.Value = pb.Maximum;
                    }
                };

                wk.RunWorkerCompleted += (s, w) =>
                {
                    if (w.Cancelled) MessageBox.Show("Возможно не все данные были загружены. Пользователь остановил загрузку данных.");
                    if (w.Error != null) MessageBox.Show("Ошибка при загрузке данных - " + w.Error.Message);

                    if (!Disposing && !IsDisposed)
                    {
                        if (DS.Tables[typename].ExtendedProperties.ContainsKey("Where")) DS.Tables[typename].ExtendedProperties["Where"] = baseWhere;

                        if (DS.Tables[typename].ExtendedProperties.ContainsKey("WhereFC")) DS.Tables[typename].ExtendedProperties.Remove("WhereFC");

                        main.HandleMacroEvents(contextId, "После загрузки");

                        if (mainWindowIsTree) fc.FilterString = LCGforFilter.Text == "LCGforFilter" ? "" : LCGforFilter.Text;

                        if (main.synchViewWithOwnerMacroType && this.Owner != null && this.Owner is EnterResource && main.IsView(main.GetTypeIDByМаcrоTypeID(macroid))) SynchAfterRefresh();

                        if (!main.isolatedDataCacheForMacroType)
                        {
                            main.loadingCtxs.Remove(contextId);
                            if (main.loadingCtxs.Count == 0) main.RaiseListChangedEvents();
                        }
                        else main.RaiseListChangedEvents(contextId);
                        main.RestoreState(dic);

                        comboBox1.Enabled = true;
                        bindingNavigator1.Enabled = true;
                        layoutControl1.Enabled = true;

                        notLookup = false;

                        loading = false;

                        if (findrec != Guid.Empty)
                        {
                            if (!mainWindowIsTree || asGrid) (gridControl1.DataSource as BindingSource).Position = (gridControl1.DataSource as BindingSource).Find("ИД", findrec);
                            else (treeList1.DataSource as BindingSource).Position = (treeList1.DataSource as BindingSource).Find("ИД", findrec);
                        }
                        else
                        {
                            if (!mainWindowIsTree || asGrid)
                            {
                                if (gridControl1.MainView != null) (gridControl1.MainView as ColumnView).MoveFirst();
                            }
                            else treeList1.MoveFirst();
                        }

                        if (lazyLoading) ReSetRootRowPosition();
                        main.SetChildPositionToFirstRow(this, typename);

                        main.LookUpForForm(this, false);

                        SetEditMode();

                        GantArea();

                        pb.Visible = false;

                        isBusy = false;
                    }
                };
            }
            else
            {
                if (wk.IsBusy)
                {
                    while (wk.IsBusy) Application.DoEvents();
                }
            }

            wk.RunWorkerAsync();
...
Рейтинг: 0 / 0
C# async... await
    #39572379
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>ViPRos, сегодня, 23:51 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1280515&msg=21047260][21047260]
>...делай через бакгроундворкер
Это уже проходил.
Я получил то, что мне надо, но не знаю почему.
...
Рейтинг: 0 / 0
C# async... await
    #39572380
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев,

второй вариант просто работает другой поток, потому рисует основной поток
...
Рейтинг: 0 / 0
C# async... await
    #39572382
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>ViPRos, сегодня, 00:00 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1280515&msg=21047280][21047280]
>второй вариант просто работает другой поток, потому рисует основной поток
Меня смутило, что это не работает:
Код: c#
1.
2.
      var t = Task.Run(() => ShowThreadInfo("Task") );
      t.Wait();
...
Рейтинг: 0 / 0
C# async... await
    #39572385
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев>ViPRos, сегодня, 00:00 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1280515&msg=21047280][21047280]
>второй вариант просто работает другой поток, потому рисует основной поток
Меня смутило, что это не работает:
Код: c#
1.
2.
      var t = Task.Run(() => ShowThreadInfo("Task") );
      t.Wait();



ты же это скопировал отсюда? почему н еработает
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
using System;
using System.Threading;
using System.Threading.Tasks;

public class Example
{
   public static void Main()
   {
      ShowThreadInfo("Application");

      var t = Task.Run(() => ShowThreadInfo("Task") );
      t.Wait();
   }

   static void ShowThreadInfo(String s)
   {
      Console.WriteLine("{0} Thread ID: {1}",
                        s, Thread.CurrentThread.ManagedThreadId);
   }
}
// The example displays the following output:
//       Application thread ID: 1
//       Task thread ID: 3
...
Рейтинг: 0 / 0
C# async... await
    #39572389
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
что бы твой метод был асинхронной и использовать await и т.д. надо что бы он был типа этого

!!!TaskCompletionSource!!!


Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
public static Task RunAsync(Action action) 
{ 
    var tcs = new TaskCompletionSource<Object>(); 
    ThreadPool.QueueUserWorkItem(_ => 
    { 
        try 
        { 
            action(); 
            tcs.SetResult(null); 
        } 
        catch(Exception exc) { tcs.SetException(exc); } 
    }); 
    return tcs.Task; 
}
...
Рейтинг: 0 / 0
C# async... await
    #39572394
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот нашел для тебя хороший учебник


На этот случай предусмотрен класс TaskCompletionSource<T>, позволяющий создать задачу Task, которой вы управляете как марионеткой. Вы можете в любой момент сделать эту задачу успешно завершившейся. Или записать в нее исключение и тем самым сказать, что она завершилась с ошибкой. Рассмотрим пример. Предположим, требуется инкапсулировать показываемый пользователю вопрос в следующем методе: Task<bool> GetUserPermission() Вопрос представляет собой написанный вами диалог, в котором у пользователя запрашивается какое-то разрешение. Поскольку запрашивать разрешение нужно в разных местах приложения, важно, чтобы метод было просто вызывать. Идеальная ситуация для использования асинхронного метода, так как мы не хотим, чтобы этот диалог отображался в потоке пользовательского интерфейса. Однако этот метод очень далек от традиционных асинхронных методов, в которых
54 Глава 6. Паттерн TAP
производится обращение к сети или еще какая-то длительная операция. В данном случае мы ждем ответа от пользователя. Рассмотрим тело метода. private Task<bool> GetUserPermission() { // Создать объект TaskCompletionSource, чтобы можно было вернуть // задачу-марионетку TaskCompletionSource<bool> tcs = new TaskCompletionSource<bool>(); // Создать диалог PermissionDialog dialog = new PermissionDialog(); // Когда пользователь закроет диалог, сделать задачу завершившейся // с помощью метода SetResult dialog.Closed += delegate { tcs.SetResult(dialog.PermissionGranted); }; // Показать диалог на экране dialog.Show(); // Вернуть еще не завершившуюся задачу-марионетку return tcs.Task; } Обратите внимание, что метод не помечен ключевым словом async; мы создаем объект Task вручную и не нуждаемся в помощи компилятора. TaskCompletionSource<bool> создает объект Task и предоставляет к нему доступ через свойство Task. Мы возвращаем этот объект, а позже делаем его завершившимся, вызывая метод SetResult объекта TaskCompletionSource. Поскольку мы следовали паттерну TAP, вызывающая программа может просто ждать разрешения пользователя с помощью await. Код получается весьма элегантным: if (await GetUserPermission()) { .... Вызывает раздражение отсутствие неуниверсальной версии класса TaskCompletionSource<T>. Однако Task<T> – подкласс Task, поэтому его можно использовать всюду, где требуется объект Task. Это в свою очередь означает, что можно воспользоваться классом TaskCompletionSource<T>, и рассматривать объект типа Task<T>, являющийся значением свойства Task, как объект типа Task. Я обычно работаю с конкретизацией TaskCompletionSource<object> и для ее заполнения вызываю SetResult(null). При желании нетрудно создать неуниверсальную версию TaskCompletionSource, основываясь на универсальной
...
Рейтинг: 0 / 0
C# async... await
    #39572395
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Асинхронное программирование в C# 5.0
Алекс Дэвис
53 страница
...
Рейтинг: 0 / 0
C# async... await
    #39572422
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttВМоисеев
Код: c#
1.
await Task.Run(() => wsp.Entity_SP(ИмяХП, sp, asp, RowToEntity));



это что, извините, за лютейший пздц?
какой асинк-эвейт здесь?
боржоми водкой запивай, чтобы не било по печени!

и это ещё что. прогресс бар на выполнение запросов? wat?! мдахх...А что не так? Обычный запуск задачи через пул потоков с асинхронным ожиданием. По сути аналог вот этого .
...
Рейтинг: 0 / 0
C# async... await
    #39572438
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Интересный у нас автор. Вместо того чтобы проверить есть ли поток или по домохозяйски сказать тормозит ли мышка с хранмкой, он с 8 до 12 занимается прогрессбаром).
...
Рейтинг: 0 / 0
C# async... await
    #39572441
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosда и во втором тоже
делай через бакгроундворкер
С net 4.5 рекомендуется await
...
Рейтинг: 0 / 0
C# async... await
    #39572447
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosВМоисеев,

второй вариант просто работает другой поток, потому рисует основной поток
Разумеется. Иными словами - в первом варианте нет потока. Тогда зачем этот топик, непонятно.
...
Рейтинг: 0 / 0
C# async... await
    #39572549
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев>hVostt, сегодня, 20:53 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1280515&msg=21046939] [21046939]
>это что, извините, за лютейший пздц?
это здесь .

>и это ещё что. прогресс бар на выполнение запросов? wat?! мдахх...
на слайде, в низу окна, зеленая полоска.

хмм... а ракеты всё падали и падали
...
Рейтинг: 0 / 0
C# async... await
    #39572700
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>ViPRos, вчера, 23:41 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1280515&msg=21047240] [21047240]

>надо прогресс сверху, тогда хорошо показывается :)

На вкус, на цвет...
...
Рейтинг: 0 / 0
C# async... await
    #39572717
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КА что не так? Обычный запуск задачи через пул потоков с асинхронным ожиданием. По сути аналог вот этого .

Мда...
...
Рейтинг: 0 / 0
C# async... await
    #39572729
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123ViPRosда и во втором тоже
делай через бакгроундворкер
С net 4.5 рекомендуется await

https://habrahabr.ru/post/261649/
...
Рейтинг: 0 / 0
C# async... await
    #39572733
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мудяцкие впихивания async/await для оборачивания синхронного кода в якобы-асинхронный, реально бесят.

Ну много ж времени уже прошло, вот Моисеев не может осилить работу с БД в асинхронном режиме, объясняй-не объясняй, это просто патология «сиди я сам открою», вы-то чего?
...
Рейтинг: 0 / 0
C# async... await
    #39572751
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt,
А че не нравится? У него драйвер бд скорее не асинхронный. Как и у меня в посгри бд.
Поэтому противопоказания к await. Нету.
...
Рейтинг: 0 / 0
C# async... await
    #39572754
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев,
Ты работай над кодом, а не картинки пости.
...
Рейтинг: 0 / 0
C# async... await
    #39572756
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей К,
+1
...
Рейтинг: 0 / 0
C# async... await
    #39572762
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Начать с:
- вместо:

ВМоисеев
Код: c#
1.
try { await wsp.Entity_SP(


Написать:
try { await wsp.Entity_SPAsync(....
...
Рейтинг: 0 / 0
C# async... await
    #39572764
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Начать с:
- вместо:

ВМоисеев
Код: c#
1.
try { await wsp.Entity_SP(



Написать:
try { await wsp.Entity_SPAsync(....
Это ТС' у если он закончил в игрушки там играться.
...
Рейтинг: 0 / 0
C# async... await
    #39572777
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttPetro123пропущено...

С net 4.5 рекомендуется await

https://habrahabr.ru/post/261649/

тоже сердитое бла, бла, а по существу 2 неполных слова
...
Рейтинг: 0 / 0
C# async... await
    #39572780
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123ViPRosда и во втором тоже
делай через бакгроундворкер
С net 4.5 рекомендуется await

мне надо по ходу работы одного потока менять состояние объекта в другом потоке
для этого у воркера есть событие прогресса

а как с await это делать?
...
Рейтинг: 0 / 0
C# async... await
    #39572795
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosмне надо по ходу работы одного потока менять состояние объекта в другом потокеа почему в чужом топике? Топик стартеру ведь это не надо?
Ты его скрином своим выбил из колеи на сутки))
...
Рейтинг: 0 / 0
C# async... await
    #39572804
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosмне надо по ходу работы одного потока менять состояние объекта в другом потоке
для этого у воркера есть событие прогресса

а как с await это делать?

https://docs.microsoft.com/en-us/dotnet/csharp/async

но ты можешь не читать конечно.. дока, книги, всякие фаулеры -- это для лохов
...
Рейтинг: 0 / 0
C# async... await
    #39572811
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123ViPRosмне надо по ходу работы одного потока менять состояние объекта в другом потокеа почему в чужом топике? Топик стартеру ведь это не надо?
Ты его скрином своим выбил из колеи на сутки))

у меня нет проблем с await, так как я вообще не работаю с ним (у меня 4.0)
но ты говоришь, что надо worker заменить на await начиная с 4.5 - вот мне и интересно стало, как это делается
тем более что ТС именно над этой задачей и бьется
так что топик тут не при чем
покажи код синхронизации потоков через await и ТС сразу выкинет свое надуманное "максдлиназапроса" и покажет четкий прогресс
...
Рейтинг: 0 / 0
C# async... await
    #39572822
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt https://docs.microsoft.com/en-us/dotnet/csharp/async

но ты можешь не читать конечно.. дока, книги, всякие фаулеры -- это для лохов
доки, книги и даже фаулер (кому интересно или у кого нет собственного опыта) очень даже нужны, особенно доки или книги, которые более развернуто описывают доки и показывают примеры
ссылку я читал, там ненужное сравнение с промисами, с ТАПом и т.д., а про TaskCompletetion всего одно слово
...
Рейтинг: 0 / 0
C# async... await
    #39572824
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosпокажи код синхронизации потоков через await
...
Рейтинг: 0 / 0
C# async... await
    #39572827
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosпокажет четкий прогресс
У него ХРАНИМКА ЗАВИСАЕТ НА 10 МИНУТ. Какой прогресс?
...
Рейтинг: 0 / 0
C# async... await
    #39572828
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosдоки, книги и даже фаулер (кому интересно или у кого нет собственного опыта) очень даже нужны, особенно доки или книги, которые более развернуто описывают доки и показывают примеры
ссылку я читал, там ненужное сравнение с промисами, с ТАПом и т.д., а про TaskCompletetion всего одно слово

ты суть-то уловил? какое асинк имеет отношение к параллелизму?
...
Рейтинг: 0 / 0
C# async... await
    #39572833
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRos., а про TaskCompletetion всего одно слово скажу второе слово. Это хорошо для http вызова. А не к ораклу.
...
Рейтинг: 0 / 0
C# async... await
    #39572836
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttViPRosдоки, книги и даже фаулер (кому интересно или у кого нет собственного опыта) очень даже нужны, особенно доки или книги, которые более развернуто описывают доки и показывают примеры
ссылку я читал, там ненужное сравнение с промисами, с ТАПом и т.д., а про TaskCompletetion всего одно слово

ты суть-то уловил? какое асинк имеет отношение к параллелизму?

асинхронность в навязанном понимание - когда инициализация (а возможно и вся работа) проходит в контексте основного потока, после инициализации основной поток работает дальше, а как делается "асинхронная" работа покрыто туманом
если работа чисто ввод-вывод то Параллельно, если нет то возможно синхронно (в основном потоке), а может и параллельно основному потоку

хреново вощем сделанная штукенция
...
Рейтинг: 0 / 0
C# async... await
    #39572838
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123ViPRos., а про TaskCompletetion всего одно слово скажу второе слово. Это хорошо для http вызова. А не к ораклу.

пока что ощущение блабла не покидает
...
Рейтинг: 0 / 0
C# async... await
    #39572848
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в отличии от некоторых я писал код под ДОС и ОС - 360 код для процессоров ввода/вывода
хорошая книга - Джермейн :)
...
Рейтинг: 0 / 0
C# async... await
    #39572853
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosпока что ощущение блабла не покидает
Врун ты.
Если поток ушел в базу на 10 мин, и ты не врубился, то заканчиваем разговор.
...
Рейтинг: 0 / 0
C# async... await
    #39572856
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123ViPRosпока что ощущение блабла не покидает
Врун ты.
Если поток ушел в базу на 10 мин, и ты не врубился, то заканчиваем разговор.
ты никогда не знаешь на сколько минут и куда что ушел
и поток ни в какую базу не может уйти
хорош пиздеть - покажи код
...
Рейтинг: 0 / 0
C# async... await
    #39572859
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttМудяцкие впихивания async/await для оборачивания синхронного кода в якобы-асинхронный, реально бесят .Это пройдёт. Мир не идеален, не всегда есть возможность переписать синхронный код на асинхронный. Ну и пусть поток висит в ожидании I/O, если это не является тонким местом.
...
Рейтинг: 0 / 0
C# async... await
    #39572865
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRos,
Показать хранимку Закрытие оперДня на 30 мин.?
Ты программист или с Луны свалился?
...
Рейтинг: 0 / 0
C# async... await
    #39572879
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123ViPRos,
Показать хранимку Закрытие оперДня на 30 мин.?
Ты программист или с Луны свалился?

покажи код синхронизации потоков при await
вот твоя хранимка возвращает 5 резалтьсетов и по мере прочтения каждого резальсета прогрессбар получает инкремент
...
Рейтинг: 0 / 0
C# async... await
    #39572895
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosвот твоя хранимка возвращает 5 резалтьсетов и по мере прочтения каждого резальсета прогрессбар получает инкремент
Эта задача в твоем больном воображении. У тс время на вычислении в хранимке идет.
Ты опять споришь, про net45 сидя на net40.
...
Рейтинг: 0 / 0
C# async... await
    #39572905
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRos,
Пример есть у Алексея, но там биндинг. А тут нет биндинга.
Пусть получит коллекцию и разом ее отдаст.
2. Пусть скажет время задержки хранимки до отдачи.
3. Пусть сделает поток.
А потом посмотрим, флудер блин.
...
Рейтинг: 0 / 0
C# async... await
    #39572909
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,

вощем кода нет, как и ожидалось
...
Рейтинг: 0 / 0
C# async... await
    #39572937
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosPetro123,

вощем кода нет, как и ожидалось
Ты тупой?
Поток заполняет коллекцию без приращения прогрессбара, т.к из хранимки нет способа возвращать прогрессбар.
...
Рейтинг: 0 / 0
C# async... await
    #39572947
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>hVostt, сегодня, 13:59 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1280515&msg=21048591][21048591]
>Ну много ж времени уже прошло, вот Моисеев не может осилить работу с БД в асинхронном режиме
Я дошел до края, используя Ваш подход и выкинул его на помойку (могу привести полный код доступа к базе данных). Вернулся к старому.
Может быть где-то я и тормоз, тогда приведите Ваш работающий код, соответствующий Ситуации 1
...
Рейтинг: 0 / 0
C# async... await
    #39572958
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеевМожет быть где-то я и тормоз
Тормоз.
Если там нет потока, а ты целые сутки прогрессБар переставлял в ГУИ с места на место.
Жди код!
...
Рейтинг: 0 / 0
C# async... await
    #39572971
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123ViPRosPetro123,

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

Это ты тупой, веренее - невежда
Ридер читает данные в асинхронном потоке, которые хранимка возвращает ридеру
...
Рейтинг: 0 / 0
C# async... await
    #39572973
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев>hVostt, сегодня, 13:59 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1280515&msg=21048591][21048591]
>Ну много ж времени уже прошло, вот Моисеев не может осилить работу с БД в асинхронном режиме
Я дошел до края, используя Ваш подход и выкинул его на помойку (могу привести полный код доступа к базе данных). Вернулся к старому.
Может быть где-то я и тормоз, тогда приведите Ваш работающий код, соответствующий Ситуации 1

что бы await wsp.Entity_SP(ИмяХП, sp, asp, RowToEntity) работал асинхронно
надо wsp.Entity_SP переписать по тому шаблону, который я показал
...
Рейтинг: 0 / 0
C# async... await
    #39572975
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRos,

public static Task RunAsync(Action action)
{
var tcs = new TaskCompletionSource<Object>();
ThreadPool.QueueUserWorkItem(_ =>
{
try
{
action();
tcs.SetResult(null);
}
catch(Exception exc) { tcs.SetException(exc); }
});
return tcs.Task;
}

Или типа
await RunAsync (() => wsp.Entity_SP) что ты и делаешь во втором случае
...
Рейтинг: 0 / 0
C# async... await
    #39572978
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosРидер читает данные в асинхронном потоке, которые хранимка возвращает ридеру
До чтения, у него ГЕО вычисления в оракле минут 10. Раз автор молчит, значит так и есть.
Значит первая запись будет через 10 минут.
Дошло?
Ты проспал на пенсии обсуждение его программы?
...
Рейтинг: 0 / 0
C# async... await
    #39572980
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123ViPRosРидер читает данные в асинхронном потоке, которые хранимка возвращает ридеру
До чтения, у него ГЕО вычисления в оракле минут 10. Раз автор молчит, значит так и есть.
Значит первая запись будет через 10 минут.
Дошло?
Ты проспал на пенсии обсуждение его программы?
ну и что???? хот через час
дай код синхронизации потоков
...
Рейтинг: 0 / 0
C# async... await
    #39572982
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosну и что???? хот через час
Как ну и что?
Если 10 мин молчок и 15 сек закачка на клиента, то нафиг такой прогрессбар?
У него уточняй.
...
Рейтинг: 0 / 0
C# async... await
    #39572983
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosдай код синхронизации потоковты уже свой дал и обосрался)
...
Рейтинг: 0 / 0
C# async... await
    #39572986
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123ViPRosдай код синхронизации потоковты уже свой дал и обосрался)
пшел
...
Рейтинг: 0 / 0
C# async... await
    #39572996
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRos,
Давно бы так.
А то даже в ветку веб проектов за мной прибежал.
У мне оно есть. Демка AutoPOI.ru.
А ты сам то делал что?
Маньяк какой то.
Не врубается что есть храминка не на запросе и не на датаСете.
Удачи тебе с твоим Випросом.
Достал.
...
Рейтинг: 0 / 0
C# async... await
    #39573000
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>ViPRos, сегодня, 17:47 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1280515&msg=21049654][21049654]
>...надо wsp.Entity_SP переписать по тому шаблону, который я показал
Да он у меня работает так, как мне надо.
Но на это стоит посмотреть - погугли "c# await progress" или "c# async await progressbar"
...
Рейтинг: 0 / 0
C# async... await
    #39573005
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев,
да пошли они
у тебя получается и хорошо
...
Рейтинг: 0 / 0
C# async... await
    #39573023
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КhVosttМудяцкие впихивания async/await для оборачивания синхронного кода в якобы-асинхронный, реально бесят .Это пройдёт. Мир не идеален, не всегда есть возможность переписать синхронный код на асинхронный. Ну и пусть поток висит в ожидании I/O, если это не является тонким местом.

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

Жирнота.
...
Рейтинг: 0 / 0
C# async... await
    #39573025
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosасинхронность в навязанном понимание - когда инициализация (а возможно и вся работа) проходит в контексте основного потока, после инициализации основной поток работает дальше, а как делается "асинхронная" работа покрыто туманом
если работа чисто ввод-вывод то Параллельно, если нет то возможно синхронно (в основном потоке), а может и параллельно основному потоку

Продолжаешь гадать вместо того, чтобы почитать и разобраться?
...
Рейтинг: 0 / 0
C# async... await
    #39573027
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt,
Кода больше получится. Тут автокаллбэк и возврат в точку входа.
Это круто. Ты как в java захотел? Там на простой поток 20 строк надо.
...
Рейтинг: 0 / 0
C# async... await
    #39573028
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttПереписывать рабочий код в эксплуатации на асинки это конечно зло.

Хотя мы один переписали. Чтобы убедиться, насколько весомый от этого профит. Профит оказался весьма и значительно весомый. Настолько, что все следующие проекты делаем async-first, без вариантов.
...
Рейтинг: 0 / 0
C# async... await
    #39573029
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123hVostt,
Кода больше получится. Тут автокаллбэк и возврат в точку входа.
Это круто. Ты как в java захотел? Там на простой поток 20 строк надо.

Какой ещё автоколлбек?
...
Рейтинг: 0 / 0
C# async... await
    #39573037
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttPetro123hVostt,
Кода больше получится. Тут автокаллбэк и возврат в точку входа.
Это круто. Ты как в java захотел? Там на простой поток 20 строк надо.

Какой ещё автоколлбек?
await myProc()
MessageBox
.....
Строка MessageBox будет выполнена ПОСЛЕ потока и задачи.
...
Рейтинг: 0 / 0
C# async... await
    #39573039
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123await myProc()
MessageBox
.....
Строка MessageBox будет выполнена ПОСЛЕ потока и задачи.

и где тут автоколлбек?
...
Рейтинг: 0 / 0
C# async... await
    #39573040
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123await myProc()

с какого перепугу ты решил, что myProc будет выполнена в отдельном потоке?
...
Рейтинг: 0 / 0
C# async... await
    #39573041
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt,
В java сразу
...
Рейтинг: 0 / 0
C# async... await
    #39573042
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttPetro123await myProc()

с какого перепугу ты решил, что myProc будет выполнена в отдельном потоке?там внутри Task.Run(
...
Рейтинг: 0 / 0
C# async... await
    #39573044
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поправлю - myProcAsync(
Так надо.
...
Рейтинг: 0 / 0
C# async... await
    #39573053
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123там внутри Task.Run(

с хрена ли там Task.Run?

в общем всё понятно с вами.
...
Рейтинг: 0 / 0
C# async... await
    #39573057
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttPetro123там внутри Task.Run(

с хрена ли там Task.Run?

в общем всё понятно с вами.
Как у автора
...
Рейтинг: 0 / 0
C# async... await
    #39573059
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttв общем всё понятно с вами.
Че то ты от всего морщишься, а сам ничего не предложил.
У меня счас проект такой на 100 потоков.
...
Рейтинг: 0 / 0
C# async... await
    #39573060
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttКакой ещё автоколлбек?понял теперь?
Поток выполнения с загогулиной).
...
Рейтинг: 0 / 0
C# async... await
    #39573062
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Удачи аффтару! Все проблемы он решил.
...
Рейтинг: 0 / 0
C# async... await
    #39573076
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttViPRosасинхронность в навязанном понимание - когда инициализация (а возможно и вся работа) проходит в контексте основного потока, после инициализации основной поток работает дальше, а как делается "асинхронная" работа покрыто туманом
если работа чисто ввод-вывод то Параллельно, если нет то возможно синхронно (в основном потоке), а может и параллельно основному потоку

Продолжаешь гадать вместо того, чтобы почитать и разобраться?
в чем разбираться то?

вот тут 21047316 я ТС скопировал то что надо и ниже привел кусок теста из книги
или у тебя какое то иное понимание асинхронности в .NET

или ты хочешь сказать, что асинхронность - это только для CLR I/O потоков и мы можем запустить только изначально асинхронные методы и сами их на .NET не можем писать?

я же написал, что понятие "асинхронность" - фуфло в данном случае (NET).
Асинхронность - независимые друг от друга процессы.
Проблема обычная - синхронизация таких процессов.
Для этого предусмотрено управление событиями.
...
Рейтинг: 0 / 0
C# async... await
    #39573099
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosили ты хочешь сказать, что асинхронность - это только для CLR I/O потоков и мы можем запустить только изначально асинхронные методы и сами их на .NET не можем писать?

не только. либо i/o, либо долгоиграющая cpu bound операция. кроме того, ожидание каких-то результатов работы. у автора ни того, ни другого. он тупо не понимает что и зачем делает, кто вообще ему клаву в руки дал? вы ещё ему и поддакиваете.


ViPRosя же написал, что понятие "асинхронность" - фуфло в данном случае (NET).
Асинхронность - независимые друг от друга процессы.
Проблема обычная - синхронизация таких процессов.
Для этого предусмотрено управление событиями.

независимые друг от друга процессы -- это параллелизм. со всеми вытекающими проблемами синхронизации потоков, блокировками. при чём тут асинхронность? async/await в C# вообще разворачивается в конечный автомат, че ты там синхронизировать собрался? ))
...
Рейтинг: 0 / 0
C# async... await
    #39573126
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttViPRosили ты хочешь сказать, что асинхронность - это только для CLR I/O потоков и мы можем запустить только изначально асинхронные методы и сами их на .NET не можем писать?

не только. либо i/o, либо долгоиграющая cpu bound операция. кроме того, ожидание каких-то результатов работы. у автора ни того, ни другого. он тупо не понимает что и зачем делает, кто вообще ему клаву в руки дал? вы ещё ему и поддакиваете.


ViPRosя же написал, что понятие "асинхронность" - фуфло в данном случае (NET).
Асинхронность - независимые друг от друга процессы.
Проблема обычная - синхронизация таких процессов.
Для этого предусмотрено управление событиями.

независимые друг от друга процессы -- это параллелизм. со всеми вытекающими проблемами синхронизации потоков, блокировками. при чём тут асинхронность? async/await в C# вообще разворачивается в конечный автомат, че ты там синхронизировать собрался? ))

автор меня сейчас меньше всего интересует

"независимые друг от друга процессы -- это параллелизм" это чистая асинхронность (диспетчера нет)
параллелизм - частный случай синхронности, (требуется диспечтер)
синхронизация независимых процессов - большая проблема (требуется механизм извещения, событийное управление, прерывания и т.д.)

async/await негарантировнные методы параллелизма
...
Рейтинг: 0 / 0
C# async... await
    #39573130
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я все это перенес на ВИП.Производство и тем заработал устойчивую ненависть профессуры от СТАНКИН и т.д.
...
Рейтинг: 0 / 0
C# async... await
    #39573132
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRos,

http://mesforum.ru/download/file.php?id=4863&mode=view

вот асинхронность, синхронизация и т.д. есть и параллельность
...
Рейтинг: 0 / 0
C# async... await
    #39573138
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosasync/await негарантировнные методы параллелизма

я до сих пор не понимаю, что ты хочешь синхронизировать и с чем в асинхронном коде.
...
Рейтинг: 0 / 0
C# async... await
    #39573139
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt,

синхронизировать (распараллелить по возможности в заданном отрезке времени) заполнение вьюмодели и генерации вью для вьюмодели
интерпретация и запись промежуточных результатов и параллельный расчет расписания
...
...
Рейтинг: 0 / 0
C# async... await
    #39573140
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosViPRos,

http://mesforum.ru/download/file.php?id=4863&mode=view

вот асинхронность, синхронизация и т.д. есть и параллельность

незнаю. асинхронность, если по теории, это отсутствие блокирования потока выполнение. это может быть связано и может быть абсолютно никак не связано с параллельными потоками. рассматривать «параллелизм» в вакууме мне вообще не интересно, потому как если на то уж пошло, то всё есть лишь суета сует.
...
Рейтинг: 0 / 0
C# async... await
    #39573142
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosсинхронизировать (распараллелить по возможности в заданном отрезке времени) заполнение вьюмодели и генерации вью для вьюмодели
интерпретация и запись промежуточных результатов и параллельный расчет расписания

при чём тут асинхронность? в том, что ты не хочешь свой UI блокировать?
...
Рейтинг: 0 / 0
C# async... await
    #39573143
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt,

да при чем тут блокировки?
блокировка - это когда ресурс не разделяем, мощность занята одномоментно (независимо от степени загрузки)
ладно, надоело ругаться, сил уже нет
...
Рейтинг: 0 / 0
C# async... await
    #39573144
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttViPRosсинхронизировать (распараллелить по возможности в заданном отрезке времени) заполнение вьюмодели и генерации вью для вьюмодели
интерпретация и запись промежуточных результатов и параллельный расчет расписания

при чём тут асинхронность? в том, что ты не хочешь свой UI блокировать?

не блокировать UI можно в редких случаях - когда все реентерабельно
а асинхронность при том что почему то синхронизация процессов делается через так называемые асинхронные методы
...
Рейтинг: 0 / 0
C# async... await
    #39573146
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt,

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

если блокировки не при чём, как и кого ты хочешь синхронизировать? с помощью такой-то матери?
...
Рейтинг: 0 / 0
C# async... await
    #39573155
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosа асинхронность при том что почему то синхронизация процессов делается через так называемые асинхронные методы

у меня такое ощущение, что у тебя понятийный оппорат совершенно отличается от общепринятых. асинхронное выполенние отличается от синхронного отсутствием блокирования потока исполнения. точка. мозги не калупай, или объясни своё понимание «асинхронности» и мы подберём ему аналог из общепринятых человеческих понятий.
...
Рейтинг: 0 / 0
C# async... await
    #39573156
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Mejtesзапуская отдельный потом, не всегда нужна асинхронность, ожидать завершение операции работающей в отдельном потоке далеко не всегда имеет смысл

любое ожидание чего угодно является блокировкой, следовательно это синхронное выполнение.

банальный Wait на таске блокирует поток, значит ни о какой асинхронности говорить не приходится.
...
Рейтинг: 0 / 0
C# async... await
    #39573158
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Mejtesожидать завершение операции работающей в отдельном потоке

вот две операции:

a = 1 + 2
b = a + 3

вторая операция ожидает, пока не выполнится первая. это нужно, потому что нам требуется результат. если бы результат был бы не нужен, вторую операцию можно было бы исполнять не ожидая первой.
...
Рейтинг: 0 / 0
C# async... await
    #39573185
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>hVostt, вчера, 21:53 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1280515&msg=21050190][21050190]
>... он тупо не понимает что и зачем делает...
Вы батенька явно что-то не то съели - задача то проста - показать в динамике время получения выборки - запускаю таймер и показываю его счетчик секунд в ПрогрессБаре
...
Рейтинг: 0 / 0
C# async... await
    #39573214
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев>hVostt, вчера, 21:53 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1280515&msg=21050190][21050190]
>... он тупо не понимает что и зачем делает...
Вы батенька явно что-то не то съели - задача то проста - показать ву динамике время получения выборки - запускаю таймер и показываю его счетчик секунд в ПрогрессБаре
))))
Вы бы хоть мемберов тут пожалели. Некоторые тут с пеной требовали синхронизации потоков с результатами от хранимки.
2. ПрогрессБар это полоска а ля position min\max а не таймер.
Кто тебе клаву дал, раз молчишь как партизан?
В прошлой теме у тебя было 120 страниц. В этой, ерунду обсуждаем кучу времени.
...
Рейтинг: 0 / 0
C# async... await
    #39573217
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев>hVostt, вчера, 21:53 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1280515&msg=21050190][21050190]
>... он тупо не понимает что и зачем делает...
Вы батенька явно что-то не то съели - задача то проста - показать в динамике время получения выборки - запускаю таймер и показываю его счетчик секунд в ПрогрессБаре

мне нечего добавить к тому, что я уже сказал
...
Рейтинг: 0 / 0
C# async... await
    #39573219
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro1232. ПрогрессБар это полоска а ля position min\max а не таймер.

да бесполезно объяснять очевидное, это паталогия
...
Рейтинг: 0 / 0
C# async... await
    #39573428
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Petro123, сегодня, 07:29 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1280515&msg=21050662] [21050662]

>hVostt , сегодня, 07:34 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1280515&msg=21050668] [21050668]


Мужики, выключайте идиотов и включайте извилины -немедленно-, а то если долго претворяться, можно и преобразоваться.
А пока не включили извилины, повторяю:
Код: 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.
      . . .
      dpt = new DispatcherTimer();
      dpt.Tick += new EventHandler(dpt_Tick);
      dpt.Interval = new TimeSpan(0, 0, 1);
      pgbWin.Minimum = 1;
      pgbWin.Maximum = гп.tm_Запрос;
     . . .

    public void tmrStart() {
      iPgbFrm = 0;
      pgbWin.Value = 0;
      dpt.Start();
    }
    
    public void tmrStop() { dpt.Stop(); pgbWin.Visibility = Visibility.Hidden; }

    //-- Показ ожидания в ProgressBar-е
    private void dpt_Tick(object sender, EventArgs e) {
      iPgbFrm++;
      if (iPgbFrm < 2) return; //-- Ожидание менее 3 секунд ещё комфортно
      if (iPgbFrm == 2) { //-- С 3-ей секунды ожидания покажем ProgressBar
        pgbWin.Visibility = Visibility.Visible;
        pgbWin.Value = iPgbFrm;
        return;
      }
      pgbWin.Value = iPgbFrm % гп.tm_Запрос + 1;
    }

    . . .


Почему проходит это:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
      . . .
      при.tmrStart();
      await Task.Run(() => wsp.Entity_SP("NCUYAO_GIS.Puski_Sql", wsp.sp_Sel, asp, RowToEntity));
      if(wsp.wspErr != null) {
        при.tmrStop();
        MessageBox.Show(wsp.wspErr, caption_Entity, MessageBoxButton.OK);
        bl_Разрешение = true;     //-- Разрешение выполнения функционала компонент
        return;
      }
      //-- Покажем выборку
      при.tmrStop();
      . . .

и не проходит это:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
      . . .
      при.tmrStart(); //-- Пуск таймера 
      try { await wsp.Entity_SP(ИмяХП, sp, asp, RowToEntity); }
      catch (System.InvalidOperationException ex) { throw new Exception(ex.Message); }
      catch (Exception ex) {
        при.tmrStop();
        MessageBox.Show(ex.Message, caption_Entity, MessageBoxButton.OK);
        bl_Разрешение = true;     //-- Разрешение выполнения функционала компонент
        return;
      }
      при.tmrStop();  //-- Останов таймера
      . . .


я не знаю.
Может быть ошибка разработчика, а может быть надо так:

Код: c#
1.
2.
3.
4.
5.
   var xTask= wsp.Entity_SP(ИмяХП, sp, asp, RowToEntity); 
   . . .
   здесь может быть надо что-то подкрутить в консерватории (Task), но что, не знаю
   . . . 
   await xTask
...
Рейтинг: 0 / 0
C# async... await
    #39573437
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеева может быть надо так:

Код: c#
1.
2.
3.
4.
5.
   var xTask= wsp.Entity_SP(ИмяХП, sp, asp, RowToEntity); 
   . . .
   здесь может быть надо что-то подкрутить в консерватории (Task), но что, не знаю
   . . . 
   await xTask


я же тебе показал, что тут надо подкрутить TCompletetionSource
...
Рейтинг: 0 / 0
C# async... await
    #39573444
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а так, когда у тебя работает - она работает за счет того, что твой метод запущен в другом потоке, а таймер работает в основном потоке.
а когда не работает, потому что твой метод работает в основном потоке (так как await выкидывается) и таймер не может работать.
...
Рейтинг: 0 / 0
C# async... await
    #39573455
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>ViPRos, 19 дек 17, 23:58 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1280515&msg=21047273] [21047273]

Я подобный код у себя преобразовал примерно так:
wk.DoWork сделал async DoWork

wk.RunWorkerCompleted сделал основной веткой программы и в начало её тела включил -await DoWork-

функционал wk.ProgressChanged включил в async DoWork, благо DoWork выполняется в UI потоке

и это мне понравилось
...
Рейтинг: 0 / 0
C# async... await
    #39573456
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев,

я про этот код

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
public static Task RunAsync(Action action) 
{ 
    var tcs = new TaskCompletionSource<Object>(); 
    ThreadPool.QueueUserWorkItem(_ => 
    { 
        try 
        { 
            action(); 
            tcs.SetResult(null); 
        } 
        catch(Exception exc) { tcs.SetException(exc); } 
    }); 
    return tcs.Task; 
}
...
Рейтинг: 0 / 0
C# async... await
    #39573457
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев,

ну для твоих целей бгворкер лучше, так как там есть прогресс (синхронизация потоков возможно встроенными возможностями) и думать не надо ни о чем
и можно показать нормальный прогресс, допустим по числу прочитанных записей, числу резалтьсетов и т.д., а не крутить фигню нескончаемую.
...
Рейтинг: 0 / 0
C# async... await
    #39573459
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosВМоисеев,

я про этот код

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
public static Task RunAsync(Action action) 
{ 
    var tcs = new TaskCompletionSource<Object>(); 
    ThreadPool.QueueUserWorkItem(_ => 
    { 
        try 
        { 
            action(); 
            tcs.SetResult(null); 
        } 
        catch(Exception exc) { tcs.SetException(exc); } 
    }); 
    return tcs.Task; 
}

Ну это аналог Task.Run . Зачем такое писать самому?
...
Рейтинг: 0 / 0
C# async... await
    #39573462
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеевМужики
2 вопроса:
- ты можешь на каждый пост отвечать и отвечать быстро? Хотя бы в пределах часа?
- ты хочешь работать с современным net 4.5, .....6?
...
Рейтинг: 0 / 0
C# async... await
    #39573467
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КViPRosВМоисеев,

я про этот код

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
public static Task RunAsync(Action action) 
{ 
    var tcs = new TaskCompletionSource<Object>(); 
    ThreadPool.QueueUserWorkItem(_ => 
    { 
        try 
        { 
            action(); 
            tcs.SetResult(null); 
        } 
        catch(Exception exc) { tcs.SetException(exc); } 
    }); 
    return tcs.Task; 
}

Ну это аналог Task.Run . Зачем такое писать самому?

ну он хочет await мойМетод
...
Рейтинг: 0 / 0
C# async... await
    #39573470
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosАлексей Кпропущено...
Ну это аналог Task.Run . Зачем такое писать самому?

ну он хочет await мойМетодНу я понял.
...
Рейтинг: 0 / 0
C# async... await
    #39573472
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КViPRosпропущено...


ну он хочет await мойМетодНу я понял.
он же всю ветку только из за этого завел
...
Рейтинг: 0 / 0
C# async... await
    #39573475
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>ViPRos, сегодня, 12:23 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1280515&msg=21051324][21051324]
>...а когда не работает...
На мой взгляд, дело тоньше (могу ошибаться):
Когда оконная функция приложения получает свой квант в UI потоке, она начинает обработку своей очереди сообщений и думаю, что оконной функции глубоко наплевать, кто положил сообщение в очередь. Важно, что она обязана как-то обработать сообщение: может быть просто отбросить, а может и вызвать ветку обработчика сообщения, что и делает в моём случае await TaskRun - не запрещает обработку от таймера.
Почему этого нет в другом случае - вопрос, по моей логике это ошибка разработчика
...
Рейтинг: 0 / 0
C# async... await
    #39573476
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosАлексей Кпропущено...
Ну я понял.
он же всю ветку только из за этого завелЯ понял. Просто есть родной метод Task.Run . Что мешает использовать его для осуществления мечты топикстартера?
...
Рейтинг: 0 / 0
C# async... await
    #39573479
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев>ViPRos, сегодня, 12:23 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1280515&msg=21051324][21051324]
>...а когда не работает...
На мой взгляд, дело тоньше (могу ошибаться):
Когда оконная функция приложения получает свой квант в UI потоке, она начинает обработку своей очереди сообщений и думаю, что оконной функции глубоко наплевать, кто положил сообщение в очередь. Важно, что она обязана как-то обработать сообщение: может быть просто отбросить, а может и вызвать ветку обработчика сообщения, что и делает в моём случае await TaskRun - не запрещает обработку от таймера.
Почему этого нет в другом случае - вопрос, по моей логике это ошибка разработчика
блин просто у тебя нет в методе DoEvents() где-нить, а так и таймер бы работал всегда
...
Рейтинг: 0 / 0
C# async... await
    #39573482
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КViPRosпропущено...

он же всю ветку только из за этого завелЯ понял. Просто есть родной метод Task.Run . Что мешает использовать его для осуществления мечты топикстартера?
ну он и осуществил в своем "втором" варианте
но он думает что там у него что то асинхронно получается
так как не понимает как и в каком потоке работает таймер, кажется
...
Рейтинг: 0 / 0
C# async... await
    #39573483
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosблин просто у тебя нет в методе DoEvents() где-нить, а так и таймер бы работал всегда"Не дай Бог каждому..." (ц)
...
Рейтинг: 0 / 0
C# async... await
    #39573484
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев,
Да. Должно работать, но почему то у тебя всегда 100 страниц.
Обратной связи нет)))))
...
Рейтинг: 0 / 0
C# async... await
    #39573488
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КViPRosблин просто у тебя нет в методе DoEvents() где-нить, а так и таймер бы работал всегда"Не дай Бог каждому..." (ц)
ну иногда надо дать работать и другим
...
Рейтинг: 0 / 0
C# async... await
    #39573489
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosАлексей Кпропущено...
Я понял. Просто есть родной метод Task.Run . Что мешает использовать его для осуществления мечты топикстартера?
ну он и осуществил в своем "втором" варианте
но он думает что там у него что то асинхронно получается
так как не понимает как и в каком потоке работает таймер, кажетсяПричём тут он? Я спрашиваю, накой самому писать аналог Task.Run?
...
Рейтинг: 0 / 0
C# async... await
    #39573496
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей К,

а кто? это не моя проблема, а его :)
сижу на 4.0
...
Рейтинг: 0 / 0
C# async... await
    #39573497
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>ViPRos, сегодня, 12:35 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1280515&msg=21051388][21051388]
>ну для твоих целей бгворкер лучше...
Э не батенька, с точностью до наоборот. В твоём варианте прав hVostt - async DoWork в случае await DoWork работает UI потоке и можешь прямо здесь работать с графическими компонентами окна.
...
Рейтинг: 0 / 0
C# async... await
    #39573501
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosсижу на 4.0Ну тогда Task.Factory.StartNew . Да?
...
Рейтинг: 0 / 0
C# async... await
    #39573522
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей К,
Можно, но то что выложено лучше показывает суть
...
Рейтинг: 0 / 0
C# async... await
    #39573523
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев>ViPRos, сегодня, 12:35 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1280515&msg=21051388][21051388]
>ну для твоих целей бгворкер лучше...
Э не батенька, с точностью до наоборот. В твоём варианте прав hVostt - async DoWork в случае await DoWork работает UI потоке и можешь прямо здесь работать с графическими компонентами окна.
да просто там нет никакого await и твой метод блокирует таймер
...
Рейтинг: 0 / 0
C# async... await
    #39573525
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а так, твоя проблема решилась и хорошо, надоело это из за тебя пришлось прочитать все это говно, которое мне нафиг не надо было
...
Рейтинг: 0 / 0
C# async... await
    #39573680
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КViPRosВМоисеев,

я про этот код

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
public static Task RunAsync(Action action) 
{ 
    var tcs = new TaskCompletionSource<Object>(); 
    ThreadPool.QueueUserWorkItem(_ => 
    { 
        try 
        { 
            action(); 
            tcs.SetResult(null); 
        } 
        catch(Exception exc) { tcs.SetException(exc); } 
    }); 
    return tcs.Task; 
}


Ну это аналог Task.Run . Зачем такое писать самому?

ну вообще-то нет, ни разу не аналог. кроме того с помощью TaskComplectionSource можно вообще обойтись без запуска потока. реализация этого паттерна у VIPROS-а так себе. дёрнул незнаю откуда.
...
Рейтинг: 0 / 0
C# async... await
    #39573683
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
специально для Алексея

http://andrey.moveax.ru/post/csharp-sync-to-async
...
Рейтинг: 0 / 0
C# async... await
    #39573697
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttАлексей Кпропущено...
Ну это аналог Task.Run . Зачем такое писать самому?

ну вообще-то нет, ни разу не аналог.С дуба рухнул? :-)
hVosttкроме того с помощью TaskComplectionSource можно вообще обойтись без запуска потока.Да ну?!?!?!?! Вот это да!?!?!?!?! И чё? :-)

Не пойму, к чему ты заговорил о TaskComplectionSource, когда речь идёт о сравнении всего метода RunAsync от ViPRos с родным методом Task.Run.
hVosttреализация этого паттерна у VIPROS-а так себе. дёрнул незнаю откуда.Обычная реализация, только незачем её реализовывать, коль есть готовое, на что я и указал.

hVostt, ну ты реально думаешь, что можешь мне по этой теме рассказать что-то новое, чего я не знаю? Наивный...
...
Рейтинг: 0 / 0
C# async... await
    #39573738
refreg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеевПочему проходит это:
Код: c#
1.
await Task.Run(() => wsp.Entity_SP("NCUYAO_GIS.Puski_Sql", wsp.sp_Sel, asp, RowToEntity)); 


и не проходит это:
Код: c#
1.
try { await wsp.Entity_SP(ИмяХП, sp, asp, RowToEntity); }

В точке await поток должен для явной асинхронности разделиться на два потока. Видимо, метод wsp.Entity_SP не является асинхронным, т.к. внутри нет вилки на два потока. И вилку приходится делать при помощи Task.Run()

ЗЫ. В частном случае, метод может, решать, быть ему асинхронным, или не быть. Если метод решит, что операция не займет много времени, метод может не разделять потоки и выполняться в синхронном режиме.
...
Рейтинг: 0 / 0
C# async... await
    #39573758
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
refregВидимо, метод wsp.Entity_SP не является асинхронным, т.к. внутри нет вилки на два потока
Почти это я пытался вбить в башку ТС.
Слово await это только декларация о намерениях. Внутри должен быть старт потока.
Я не усложняю ТЗ и не хочу обсуждать про выбор в вилке.
Я за
await myProcAsinc()
Как рекомендует ms.
Т.е. мы вызываем изначально метод с потоком.
...
Рейтинг: 0 / 0
C# async... await
    #39573768
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttну вообще-то нет, ни разу не аналог. кроме того с помощью TaskComplectionSource можно вообще обойтись без запуска потока. реализация этого паттерна у VIPROS-а так себе. дёрнул незнаю откуда.
я бл* привел ссылку на автора и выложил кусок теста

Асинхронное программирование в C# 5.0
Алекс Дэвис
...
Рейтинг: 0 / 0
C# async... await
    #39573775
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttспециально для Алексея

http://andrey.moveax.ru/post/csharp-sync-to-async
Надуманная статья не относящаяся к задаче.
...
Рейтинг: 0 / 0
C# async... await
    #39573781
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttреализация этого паттерна
Какие паттерны, если там 2 строки кода?
Окстись.
...
Рейтинг: 0 / 0
C# async... await
    #39573782
Парамон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttну вообще-то нет, ни разу не аналог. кроме того с помощью TaskComplectionSource можно вообще обойтись без запуска потока. реализация этого паттерна у VIPROS-а так себе. дёрнул незнаю откуда.
большой разницы не вижу.
по сути это:

if быстро
-- SetResult
else if долго
-- Task.Run
...
Рейтинг: 0 / 0
C# async... await
    #39573784
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttспециально для Алексея

http://andrey.moveax.ru/post/csharp-sync-to-async
он пересказывает как раз ту книгу
...
Рейтинг: 0 / 0
C# async... await
    #39573786
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПарамонhVosttну вообще-то нет, ни разу не аналог. кроме того с помощью TaskComplectionSource можно вообще обойтись без запуска потока. реализация этого паттерна у VIPROS-а так себе. дёрнул незнаю откуда.
большой разницы не вижу.
по сути это:

if быстро
-- SetResult
else if долго
-- Task.Runи нафига тут это надо?
...
Рейтинг: 0 / 0
C# async... await
    #39573791
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
refregВ частном случае, метод может, решать, быть ему асинхронным, или не быть.
В очень частном, т.к. у меня еще пул решает и оптимизирует короткие задачи на 0,3 сек.
...
Рейтинг: 0 / 0
C# async... await
    #39573837
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дык вы и не попытались посмотреть код при таких сомнениях? ужось
...
Рейтинг: 0 / 0
C# async... await
    #39573855
refreg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123refregВ частном случае, метод может, решать, быть ему асинхронным, или не быть.
В очень частном, т.к. у меня еще пул решает и оптимизирует короткие задачи на 0,3 сек.При чем здесь ты? превратили хороший форум в ПТ... И что такое очень частный? А есть еще очень-очень частный?
...
Рейтинг: 0 / 0
C# async... await
    #39573856
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRos,
У нас без сомнений на амбразуру только ты первый).
А ТС ждет 50 страниц))).
...
Рейтинг: 0 / 0
C# async... await
    #39573858
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
refregИ что такое очень частный? А есть еще очень-очень частный?
Твой частный случай не относится к теме топика.
Не флуди!
...
Рейтинг: 0 / 0
C# async... await
    #39573864
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
refregПри чем здесь ты?
ТС просит запустить хранимку с часиками, а не твою вилку и управления потоками.
...
Рейтинг: 0 / 0
C# async... await
    #39573867
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вроде весна еще не скоро...
...
Рейтинг: 0 / 0
C# async... await
    #39573872
refreg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pedro123refregПри чем здесь ты?
ТС просит запустить хранимку с часиками, а не твою вилку и управления потоками.Мда...
...
Рейтинг: 0 / 0
C# async... await
    #39573882
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
refregPedro123пропущено...

ТС просит запустить хранимку с часиками, а не твою вилку и управления потоками.Мда...
Ты тоже на 4.0?
Алексей КViPRosсижу на 4.0Ну тогда Task.Factory.StartNew . Да?
...
Рейтинг: 0 / 0
C# async... await
    #39573907
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КhVostt, ну ты реально думаешь, что можешь мне по этой теме рассказать что-то новое, чего я не знаю? Наивный...

После того как ты сказал «а чё такого?» про Task.Run для кода ТС, я уже сильно сомневаюсь, знаешь ли
...
Рейтинг: 0 / 0
C# async... await
    #39573909
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosя бл* привел ссылку на автора и выложил кусок теста

Асинхронное программирование в C# 5.0

Да, выложил, но сделал это невпопад, автору надо мозг лечить, а не TaskComplectionSource впихивать, который ему не упал ни разу.
...
Рейтинг: 0 / 0
C# async... await
    #39573910
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123hVosttспециально для Алексея

http://andrey.moveax.ru/post/csharp-sync-to-async
Надуманная статья не относящаяся к задаче.

Ваши обязательные 3 копейки приняты, и отосланы автору статьи почтой.
...
Рейтинг: 0 / 0
C# async... await
    #39573912
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRoshVosttспециально для Алексея

http://andrey.moveax.ru/post/csharp-sync-to-async
он пересказывает как раз ту книгу

он отлично объясняет суть для тех, кто видит здесь какую-то магию. TCS может использоваться для включения старого кода на TAP. и ещё в редких ограниченных случаях в целях оптимизации.
...
Рейтинг: 0 / 0
C# async... await
    #39573915
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
refregPedro123пропущено...

ТС просит запустить хранимку с часиками, а не твою вилку и управления потоками.Мда...

Угу, «мда» не то слово. Рад появлению второго здравомыслящего человека в ветке, теперь нас здесь двое
...
Рейтинг: 0 / 0
C# async... await
    #39573917
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>refreg, сегодня, 15:48 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1280515&msg=21052460][21052460]
>...Видимо, метод wsp.Entity_SP не является асинхронным...
Вот код, где по Вашему не так?
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
    . . .
    //-- Выполнение хранимой процедуры
    public static async Task Entity_SP(string spname, dlg_sp sp, OracleParameter[] asp, dlg_RowToEntity RowToEntity) {
      nRow = 0;  //-- Число строк в выборке
      reader = null;

      using (OracleConnection connection = new OracleConnection(гп.str_Соединение)) {
        connection.Open();
        OracleCommand command = new OracleCommand("", connection);
        command.Parameters.Clear();
        command.Parameters.AddRange(asp);
        command.CommandText = spname;
        command.CommandType = CommandType.StoredProcedure;

        using (reader = (OracleDataReader)await command.ExecuteReaderAsync()) {
          //-- Формируем коллекцию из выборки
          sp(RowToEntity); //-- Обратный вызов
        }
      }
    }
    . . .
...
Рейтинг: 0 / 0
C# async... await
    #39573918
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttДа, выложил, но сделал это невпопад, автору надо мозг лечить, а не TaskComplectionSource впихивать, который ему не упал ни разу.

*автору всмысле ТС ))
...
Рейтинг: 0 / 0
C# async... await
    #39573923
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев,

Хм.. так у тебя метод-то асинхронный
...
Рейтинг: 0 / 0
C# async... await
    #39573926
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев,
Нужно не reader в поток запихивать, а целиком весь метод вместе с получением соединения.
...
Рейтинг: 0 / 0
C# async... await
    #39573930
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев
Код: c#
1.
command.ExecuteReaderAsync()


Если есть асинхронный метод в драйвере, то беру слова назад. У меня с Posgre нет таких.
...
Рейтинг: 0 / 0
C# async... await
    #39573932
Фотография 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.
    . . .
    //-- Выполнение хранимой процедуры
    public static void Entity_SP(string spname, dlg_sp sp, OracleParameter[] asp, dlg_RowToEntity RowToEntity) {
      nRow = 0;  //-- Число строк в выборке
      reader = null;
      wspErr = null;

      try {
        using (OracleConnection connection = new OracleConnection(гп.str_Соединение)) {
          connection.Open();
          OracleCommand command = new OracleCommand("", connection);
          command.Parameters.Clear();
          command.Parameters.AddRange(asp);
          command.CommandText = spname;
          command.CommandType = CommandType.StoredProcedure;

          using (reader = (OracleDataReader)command.ExecuteReader()) {
            //-- Формируем коллекцию из выборки
            sp(RowToEntity); //-- Обратный вызов
          }
        }
      }
      catch (Exception ex){ wspErr = ex.Message; }
    }
    . . .



билять, нашёл! а я уж думал у меня с памятью что-то не то. помню же, что никакого асинка в методе Entity_SP нам не показывали..

а тут бац! и нарисовалось.
...
Рейтинг: 0 / 0
C# async... await
    #39573935
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123У меня с Posgre нет таких.

как это нет? npgsql
...
Рейтинг: 0 / 0
C# async... await
    #39573938
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt,
Именно))))))
...
Рейтинг: 0 / 0
C# async... await
    #39573939
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttPetro123У меня с Posgre нет таких.

как это нет? npgsql старый проект. Поищу.
Счас все коннекты в пуле берутся по одному на поток. Работает.
...
Рейтинг: 0 / 0
C# async... await
    #39573941
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt,
Он ведь не показывал этот код? Сволочь))))
...
Рейтинг: 0 / 0
C# async... await
    #39573942
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Petro123, сегодня, 17:55 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1280515&msg=21053109][21053094]
>Если есть асинхронный метод в драйвере...
Использую провайдер Devart dotConnect for Oracle, здесь есть. Похоже и для Posgre тоже
...
Рейтинг: 0 / 0
C# async... await
    #39573946
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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.
    . . .
    //-- Выполнение хранимой процедуры
    public static void Entity_SP(string spname, dlg_sp sp, OracleParameter[] asp, dlg_RowToEntity RowToEntity) {
      nRow = 0;  //-- Число строк в выборке
      reader = null;
      wspErr = null;

      try {
        using (OracleConnection connection = new OracleConnection(гп.str_Соединение)) {
          connection.Open();
          OracleCommand command = new OracleCommand("", connection);
          command.Parameters.Clear();
          command.Parameters.AddRange(asp);
          command.CommandText = spname;
          command.CommandType = CommandType.StoredProcedure;

          using (reader = (OracleDataReader)command.ExecuteReader()) {
            //-- Формируем коллекцию из выборки
            sp(RowToEntity); //-- Обратный вызов
          }
        }
      }
      catch (Exception ex){ wspErr = ex.Message; }
    }
    . . .



билять, нашёл! а я уж думал у меня с памятью что-то не то. помню же, что никакого асинка в методе Entity_SP нам не показывали..

а тут бац! и нарисовалось.
ну, он переделал
видишь метод то по другому называется
...
Рейтинг: 0 / 0
C# async... await
    #39573948
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>hVostt, сегодня, 18:03 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1280515&msg=21053116][21053116]
>...а тут бац! и нарисовалось.
Так работаем с хранимкой в случае await Task.Run
...
Рейтинг: 0 / 0
C# async... await
    #39573953
refreg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев>refreg, сегодня, 15:48 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1280515&msg=21052460][21052460]
>...Видимо, метод wsp.Entity_SP не является асинхронным...
Вот код, где по Вашему не так?
Код: c#
1.
2.
3.
4.
using (reader = (OracleDataReader)await command.ExecuteReaderAsync()) {
          //-- Формируем коллекцию из выборки
          sp(RowToEntity); //-- Обратный вызов
        }



Отсюда :
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
using (DbDataReader reader = await command.ExecuteReaderAsync()) {
            while (await reader.ReadAsync()) {
               for (int i = 0; i < reader.FieldCount; i++) {
                  // Process each column as appropriate
                  object obj = await reader.GetFieldValueAsync<object>(i);
                  Console.WriteLine(obj);
               }
            }

Обрати внимание, что тут 3 await. Получить реадер можно очень быстро, но надо же еще получить данные. И, еще момент: драйвер может быть и синхронным, или решить, что задачу можно выполнить синхронно. Надо убедиться в этой возможности у поставщика, в документации.
...
Рейтинг: 0 / 0
C# async... await
    #39573955
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>ВМоисеев,
очепятка - в случае await без Task.Run
...
Рейтинг: 0 / 0
C# async... await
    #39573960
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев>ВМоисеев,
очепятка - в случае await без Task.Run
ну тебе с первого дня про то и говорили, что бы пользовался асинхронными методами
...
Рейтинг: 0 / 0
C# async... await
    #39573967
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Теперь смотрим на исходный код и дивимся, а паттерн то знакомый!!!

Код: 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.
38.
39.
40.
41.
42.
 new public Task<SqlDataReader> ExecuteReaderAsync(CommandBehavior behavior, CancellationToken cancellationToken) {
 
            Bid.CorrelationTrace("<sc.SqlCommand.ExecuteReaderAsync|API|Correlation> ObjectID%d#, behavior=%d{ds.CommandBehavior}, ActivityID %ls\n", ObjectID, (int)behavior);
            SqlConnection.ExecutePermission.Demand();
 
            TaskCompletionSource<SqlDataReader> source = new TaskCompletionSource<SqlDataReader>();
 
            CancellationTokenRegistration registration = new CancellationTokenRegistration();
            if (cancellationToken.CanBeCanceled) {
                if (cancellationToken.IsCancellationRequested) {
                    source.SetCanceled();
                    return source.Task;
                }
                registration = cancellationToken.Register(CancelIgnoreFailure);
            }
 
            Task<SqlDataReader> returnedTask = source.Task;
            try {
                RegisterForConnectionCloseNotification(ref returnedTask);
 
                Task<SqlDataReader>.Factory.FromAsync(BeginExecuteReaderAsync, EndExecuteReaderAsync, behavior, null).ContinueWith((t) => {
                    registration.Dispose();
                    if (t.IsFaulted) {
                        Exception e = t.Exception.InnerException;
                        source.SetException(e);
                    }
                    else {
                        if (t.IsCanceled) {
                            source.SetCanceled();
                        }
                        else {
                            source.SetResult(t.Result);
                        }
                    }
                }, TaskScheduler.Default);
            }
            catch (Exception e) {
                source.SetException(e);
            }
 
            return returnedTask;
        }
...
Рейтинг: 0 / 0
C# async... await
    #39573968
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев>Petro123, сегодня, 17:55 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1280515&msg=21053109][21053094]
>Если есть асинхронный метод в драйвере...
Использую провайдер Devart dotConnect for Oracle, здесь есть. Похоже и для Posgre тоже
Ну, если будут ошибки и захочешь Все завернуть без асинк в дровах - заходи))).
У меня await + task.run + лябда вместе с коннектами.
Работает.
...
Рейтинг: 0 / 0
C# async... await
    #39573971
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>refreg, сегодня, 18:19 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1280515&msg=21053164][21053164]
>Обрати внимание, что тут 3 await...
Полный код:

Формирование выборки
Код: 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.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
using System;
using System.Data;
using Devart.Data.Oracle;
using System.Threading.Tasks;

namespace ns_ГИС {
  public delegate void dlg_sp(dlg_RowToEntity RowToEntity);
  public delegate void dlg_RowToEntity(IDataRecord reader);

  public static class wsp {
    static int nRow;
    static OracleDataReader reader;

    //-- Обработка строк выборки select
    public static async void sp_Sel(dlg_RowToEntity RowToEntity) {
      while (await reader.ReadAsync()) {
        nRow++;
        if (nRow == гп.max_Выборка) break;   //-- Это максимум что можем отобразить, надо уточнять запрос
        RowToEntity(reader);
      }
    }
    //-- Обработка строки выборки insert
    public static async void sp_Ins(dlg_RowToEntity RowToEntity) {
      if (await reader.ReadAsync()) RowToEntity(reader);
    }
    //-- Обработка строки выборки update
    public static async void sp_Upd(dlg_RowToEntity RowToEntity) {
      int i = 0;
      if (await reader.ReadAsync()) {
        i = reader.FieldCount;
        i = (int)reader.GetInt32(i-1);
        RowToEntity(reader);
        if (i != 1) throw new Exception("Запись кем то изменена");
      }
    }
    //-- Обработка строки выборки delete
    public static async void sp_Del(dlg_RowToEntity RowToEntity) {
      if (await reader.ReadAsync()) {
        //-- Если читаем якобы удаленную строку, то удаления нет
        RowToEntity(reader);
        throw new Exception("Запись кем то изменена");
      }
    }

    //-- Выполнение хранимой процедуры
    public static async Task Entity_SP(string spname, dlg_sp sp, OracleParameter[] asp, dlg_RowToEntity RowToEntity) {
      nRow = 0;  //-- Число строк в выборке
      reader = null;

      using (OracleConnection connection = new OracleConnection(гп.str_Соединение)) {
        connection.Open();
        OracleCommand command = new OracleCommand("", connection);
        command.Parameters.Clear();
        command.Parameters.AddRange(asp);
        command.CommandText = spname;
        command.CommandType = CommandType.StoredProcedure;

        using (reader = (OracleDataReader)await command.ExecuteReaderAsync()) {
          //-- Формируем коллекцию из выборки
          sp(RowToEntity); //-- Обратный вызов
        }
      }
    }
  }
  . . .
    //-- Строку выбоки из таблиц базы данных отражаем на entity 
    //-- 0.pk_puska, 1.nv, 2.dt_puska, 3.nom_puska, 4.strana_puska, 5.mesto_puska 
    //-- 6.lng_s, 7.lat_s, 8.lng_p, 9.lat_p, 10.reg
    private void RowToEntity(IDataRecord record) {
      xrow = new row_Entity() {
        chb_Entity = false,
        pk_Entity = record.GetInt64(0),              //-- суррогатный ключ
        nv = record.GetInt64(1),                     //-- Для оптимистической блокировки

        dt_Пуск = record.GetDateTime(2),
        str_НомерПуска = record.GetString(3).Trim(),
        str_СтранаПуска = record.GetString(4).Trim(),
        str_МестоПуска = record.GetString(5).Trim(),
        fl_Lng_s = record.GetFloat(6),                 //-- Долгота объекта
        fl_Lat_s = record.GetFloat(7),                 //-- Широта объекта
        fl_Lng_p = record.GetFloat(8),                 //-- Долгота объекта
        fl_Lat_p = record.GetFloat(9),                 //-- Широта объекта
        reg = null
      };
      if (!record.IsDBNull(10)) {
        byte[] xbt = new byte[84];
        record.GetBytes(10, 0, xbt, 0, 84);
        xrow.reg = xbt;
      } 
      lst_Entity.Add(xrow);
    }
    . . .


...
Рейтинг: 0 / 0
C# async... await
    #39573973
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев
Код: c#
1.
sp(RowToEntity)


У тебя там к ГУИ нет вызовов?
...
Рейтинг: 0 / 0
C# async... await
    #39573978
refreg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев
Код: c#
1.
await reader.ReadAsync()


Попробуй везде (в библиотечном коде, в котором точно нет UI) заменить на
Код: c#
1.
await reader.ReadAsync().ConfigureAwait(false)
...
Рейтинг: 0 / 0
C# async... await
    #39573983
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев,
Ты раньше в ветке Оракла пел что у тебя временные таблицы в хранимке и тормозит.
Тут зачем асинхронность? Сколько в цифрах?
...
Рейтинг: 0 / 0
C# async... await
    #39573986
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
refreg
Код: c#
1.
await reader.ReadAsync().ConfigureAwait(false)



это ничего не изменит, хотя может спасти от дедлоков в некоторых случаях и работать будет по-быстрее, так как не будет восстанавливаться контекст в continuation
...
Рейтинг: 0 / 0
C# async... await
    #39573989
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев,

рекомендую ознакомиться вот этой статьёй

https://stephenhaunts.com/2014/10/14/using-async-and-await-to-update-the-ui-thread/
...
Рейтинг: 0 / 0
C# async... await
    #39574011
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt,
Посмотрел.
У меня не выйдет вариант с асинхронными дровами методами.
У меня ГИС. 100 слоев карты это 100 сущностей хибернейт.
Читает из базы адаптер 15сек. И далее в оперативке строится слой 2мин.
Поэтому я завернул Весь код в поток.
for layer .....count{
NewLayerAsync(...
}
Где и сколько тормозит у автора хз.
Он идет на 100 страниц. Либо обучается)).
...
Рейтинг: 0 / 0
C# async... await
    #39574015
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,

ну вообще для десткопа не так уж критично экономить на потоках
...
Рейтинг: 0 / 0
C# async... await
    #39574017
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt,
Тут пул экономит. Я ему 100 раз task.run лямбда, а он более 20 не апускает))).
Меня устраивает.
Словари пришлось поменять на потокозащищенные.
...
Рейтинг: 0 / 0
C# async... await
    #39574018
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Petro123, сегодня, 19:25 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1280515&msg=21053348] [21053348]

>...У меня ГИС. 100 слоев карты ...
Хоть и не по теме, но интересно - это Вы о чем?
...
Рейтинг: 0 / 0
C# async... await
    #39574023
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев>Petro123, сегодня, 19:25 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1280515&msg=21053348] [21053348]

>...У меня ГИС. 100 слоев карты ...
Хоть и не по теме, но интересно - это Вы о чем?
Проект на работе.
...
Рейтинг: 0 / 0
C# async... await
    #39574024
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев,
Ты сам то когда про свой уточнять будешь?
Или закрывай тему.
...
Рейтинг: 0 / 0
C# async... await
    #39574116
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>ВМоисеев, сегодня, 18:41 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1280515&msg=21053225][21053225]
Раньше не мог аккуратно тестировать хранимую процедуру Oracle - не знал как реализовать задержку.
Спасибо коллеге за процедуру:
-- Задержка
Код: plsql
1.
2.
3.
 procedure my_sleep( p_sleep in number )
 as language java
 name 'java.lang.Thread.sleep( long )';


Теперь могу тестировать и так:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
 -- Выборка из таблицы Strani_Puskov с параметрами
 procedure Strani_Puskov_Sql(
   cur_viborka out t_cursor
   ,x_Strana_Puska in varchar2
 )
 as
  sql_sel varchar2(2000) := '
  SELECT pk_Strana_Puska,nv,Strana_Puska,sk
  FROM tbl_Strani_Puskov
  WHERE (pk_Strana_Puska<>0)';
  sel1 varchar2(50) := ' AND Strana_Puska LIKE' || '''' || x_Strana_Puska || '''';

 begin
  if(x_Strana_Puska is not null) then
   sql_sel := sql_sel || sel1;
  end if;

  sql_sel := sql_sel || ' ORDER BY SK,Strana_Puska';

  -- Тест
  [color=red]my_sleep(9000);[/color]

  open cur_viborka for sql_sel;
 end Strani_Puskov_Sql;
...
Рейтинг: 0 / 0
C# async... await
    #39574122
refreg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttrefreg
Код: c#
1.
await reader.ReadAsync().ConfigureAwait(false)

это ничего не изменит, хотя может спасти от дедлоков в некоторых случаях и работать будет по-быстрее, так как не будет восстанавливаться контекст в continuation

Смотри, что я имел ввиду (добрался, до компа написать тестовую хрень):
Код: 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.
38.
39.
        private async void button1_Click(object sender, EventArgs e)
        {
            textBox1.Text = @"Start";

            Debug.WriteLine("UI:" + Thread.CurrentThread.ManagedThreadId);
            // var k = await Method().ConfigureAwait(true);            
            var k = await Method2().ConfigureAwait(true);
            Debug.WriteLine("IsUI" + Thread.CurrentThread.ManagedThreadId);

            textBox1.Text = @"Stop. Result is " + k;
        }

        private async Task<int> Method()
        {
            await Task.Delay(TimeSpan.FromSeconds(1)).ConfigureAwait(true);
            Debug.WriteLine(Thread.CurrentThread.ManagedThreadId);
            await Task.Delay(TimeSpan.FromSeconds(1)).ConfigureAwait(true);
            Debug.WriteLine(Thread.CurrentThread.ManagedThreadId);
            await Task.Delay(TimeSpan.FromSeconds(1)).ConfigureAwait(true);
            Debug.WriteLine(Thread.CurrentThread.ManagedThreadId);
            await Task.Delay(TimeSpan.FromSeconds(1)).ConfigureAwait(true);
            Debug.WriteLine(Thread.CurrentThread.ManagedThreadId);

            return 5;
        }

        private async Task<int> Method2()
        {
            await Task.Delay(TimeSpan.FromSeconds(1)).ConfigureAwait(false);
            Debug.WriteLine(Thread.CurrentThread.ManagedThreadId);
            await Task.Delay(TimeSpan.FromSeconds(1)).ConfigureAwait(false);
            Debug.WriteLine(Thread.CurrentThread.ManagedThreadId);
            await Task.Delay(TimeSpan.FromSeconds(1)).ConfigureAwait(false);
            Debug.WriteLine(Thread.CurrentThread.ManagedThreadId);
            await Task.Delay(TimeSpan.FromSeconds(1)).ConfigureAwait(false);
            Debug.WriteLine(Thread.CurrentThread.ManagedThreadId);

            return 5;
        }



В случае, Method, вывод такой:
Код: plaintext
1.
2.
3.
4.
5.
UI:1
1
1
1
1
IsUI1

В случае Method2, такой:
Код: plaintext
1.
2.
3.
4.
5.
UI:1
4
5
4
5
IsUI1
...
Рейтинг: 0 / 0
C# async... await
    #39574165
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев,
- LIKE убрать
- склейку строк через || убрать
Проверить эффект через план выполнения.
Удивится тому, что может асинхронность и не нужна.
...
Рейтинг: 0 / 0
C# async... await
    #39574166
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеевЗадержка
Нужно еще в нужное место ставить задержку.
Видел у меня выше тормоз был не в бд а в оперативке в БЛ.
...
А в бд еще эффективнее ГЕНЕРАЦИЯ тестовых данных в табличках.
...
Рейтинг: 0 / 0
C# async... await
    #39574167
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЗЫ.. Я удивляюсь, зачем для select вообще хранимка?
В шарпе нет АппСервера?
...
Рейтинг: 0 / 0
C# async... await
    #39574169
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
refregВМоисеев
Код: c#
1.
await reader.ReadAsync()



Попробуй везде (в библиотечном коде, в котором точно нет UI) заменить на
Код: c#
1.
await reader.ReadAsync().ConfigureAwait(false)

вроде тут обычный прикладной код. Где должен быть лаконизм и минимум технического кода.
Значит это лишнее.
Не?
...
Рейтинг: 0 / 0
C# async... await
    #39574177
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
refregВ случае, Method, вывод такой:
Код: plaintext
1.
2.
3.
4.
5.
UI:1
1
1
1
1
IsUI1
В случае Method2, такой:
Код: plaintext
1.
2.
3.
4.
5.
UI:1
4
5
4
5
IsUI1


Так всё верно, continuation выполняется на любом первом свободном потоке без восстановления контекста синхронизации, именно благодаря этому не будет дедлоков, если кто-то сделал где-то Wait
...
Рейтинг: 0 / 0
C# async... await
    #39574180
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
refreg,

внутри внешних методов топикастера UI поток не нужен, и да, ConfigureAwait(false) надо делать всегда и везде, кроме основного потока исполнения. неудобный синтаксис, лучше бы атрибут сделали или freeasync какой-нибудь ))
...
Рейтинг: 0 / 0
C# async... await
    #39574188
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttименно благодаря этому не будет дедлоков, если кто-то сделал где-то Wait
Вот оно что. Вы все про костыли к старому коду? Тогда проехали. Ни мне, ни ТС это не надо.
У нас Wait нету в старом коде. А до ГУИ очень близко. Могу вызвать след.строкой после await.
...
Рейтинг: 0 / 0
C# async... await
    #39574189
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
refregВМоисеевПочему проходит это:
Код: c#
1.
await Task.Run(() => wsp.Entity_SP("NCUYAO_GIS.Puski_Sql", wsp.sp_Sel, asp, RowToEntity)); 



и не проходит это:
Код: c#
1.
try { await wsp.Entity_SP(ИмяХП, sp, asp, RowToEntity); }


В точке await поток должен для явной асинхронности разделиться на два потока. Видимо, метод wsp.Entity_SP не является асинхронным, т.к. внутри нет вилки на два потока. И вилку приходится делать при помощи Task.Run()

ЗЫ. В частном случае, метод может, решать, быть ему асинхронным, или не быть. Если метод решит, что операция не займет много времени, метод может не разделять потоки и выполняться в синхронном режиме.Асинхронный не значит многопоточный.

Для явной асинхронности достаточно не ждать ответа от БД, а не делиться на два потока.
...
Рейтинг: 0 / 0
C# async... await
    #39574203
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>skyANA, сегодня, 08:59 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1280515&msg=21054252] [21054252]
>Асинхронный не значит многопоточный.
Главным преимуществом await перед task.wait, по мнению разработчиков, является то, что в случае await оконная функция должна продолжать обработку очереди сообщений
...
Рейтинг: 0 / 0
C# async... await
    #39574212
refreg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttТак всё верно, continuation выполняется на любом первом свободном потоке без восстановления контекста синхронизации, именно благодаря этому не будет дедлоков, если кто-то сделал где-то WaitСогласен, насчет дедлоков. Но я не об этом. Если не конфигурировать поток, и вызвать код из UI, то UI будет постоянно задействоваться, что приводит к торможению UI, вплоть до полного зависания.

hVosttвнутри внешних методов топикастера UI поток не нужен, и да, ConfigureAwait(false) надо делать всегда и везде, кроме основного потока исполнения. неудобный синтаксис, лучше бы атрибут сделали или freeasync какой-нибудь ))Надо было сделать по умолчанию false. Было бы более логично...
...
Рейтинг: 0 / 0
C# async... await
    #39574217
refreg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAАсинхронный не значит многопоточный.
Для явной асинхронности достаточно не ждать ответа от БД, а не делиться на два потока.Да асинхронный, не значит многопоточный. Но это не значит, что можно обойтись одним потоком для явной асинхронности.
...
Рейтинг: 0 / 0
C# async... await
    #39574218
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
refregskyANAАсинхронный не значит многопоточный.
Для явной асинхронности достаточно не ждать ответа от БД, а не делиться на два потока.Да асинхронный, не значит многопоточный. Но это не значит, что можно обойтись одним потоком для явной асинхронности.Да нет. Можно.

К примеру Node.js однопоточный и явно асинхронный
...
Рейтинг: 0 / 0
C# async... await
    #39574223
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
refregЕсли не конфигурировать поток, и вызвать код из UI,
Что значит из ГУИ? Технически это основной поток приложения.
Мы же не про серверный процесс в трехзвенке тут обсуждам.
Т.е. в контексте топика у меня или у ТС торможение?
Не верю).
...
Рейтинг: 0 / 0
C# async... await
    #39574224
refreg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANArefregпропущено...
Да асинхронный, не значит многопоточный. Но это не значит, что можно обойтись одним потоком для явной асинхронности.Да нет. Можно.

К примеру Node.js однопоточный и явно асинхронный Мы говорим про С#, и сахар await
...
Рейтинг: 0 / 0
C# async... await
    #39574225
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев>skyANA, сегодня, 08:59 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1280515&msg=21054252] [21054252]
>Асинхронный не значит многопоточный.
Главным преимуществом await перед task.wait, по мнению разработчиков, является то, что в случае await оконная функция должна продолжать обработку очереди сообщенийУ Вас проблема в Вашем собственном коде.

Мы Вам предлагали его переписать? Предлагали следовать принципам проектирования? Предлагали.
Но Вы пошли по пути "я не следую догмам", вот теперь и обретаетогребаете.
...
Рейтинг: 0 / 0
C# async... await
    #39574226
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев>skyANA, сегодня, 08:59 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1280515&msg=21054252] [21054252]
>Асинхронный не значит многопоточный.
Главным преимуществом await перед task.wait, по мнению разработчиков, является то, что в случае await оконная функция должна продолжать обработку очереди сообщений
Да. Просто запомни что wait устарел.
...
Рейтинг: 0 / 0
C# async... await
    #39574230
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
refregskyANAпропущено...
Да нет. Можно.

К примеру Node.js однопоточный и явно асинхронный Мы говорим про С#, и сахар awaitЕсли честно, то я вообще не понимаю о чём вы тут говорите.
Мне кажется, что в ветке просто флуд.
...
Рейтинг: 0 / 0
C# async... await
    #39574240
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
refregskyANAпропущено...
Да нет. Можно.

К примеру Node.js однопоточный и явно асинхронный Мы говорим про С#, и сахар await
Да. Про мейнстрим и сахар))))))))
...
Рейтинг: 0 / 0
C# async... await
    #39574244
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>skyANA, сегодня, 09:39 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1280515&msg=21054353] [21054353]
>У Вас проблема в Вашем собственном коде.
Чушь.
Надо же быть такими упертыми, почему же до Вас не дойдет, что то что Вы предлагали и предлагаете, по Вашим же понятиям, в моей ситуации - говнокод. Ведь ткнул же носом.
Он не работает. Ваше предложение отправил на помойку - мой вариант, await Task.Run, работает.
...
Рейтинг: 0 / 0
C# async... await
    #39574248
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев>skyANA, сегодня, 09:39 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1280515&msg=21054353] [21054353]
>У Вас проблема в Вашем собственном коде.
Чушь.
Надо же быть такими упертыми, почему же до Вас не дойдет, что то что Вы предлагали и предлагаете, по Вашим же понятиям, в моей ситуации - говнокод. Ведь ткнул же носом.
Он не работает. Ваше предложение отправил на помойку - мой вариант, await Task.Run, работает.Успокойтесь. Я в этом топике ничего ещё не предлагал.
И не собираюсь. Разбираетесь сами с тем, что нагородили
...
Рейтинг: 0 / 0
C# async... await
    #39574271
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
refregЕсли не конфигурировать поток, и вызвать код из UI, то UI будет постоянно задействоваться, что приводит к торможению UI, вплоть до полного зависания.

То, о чём ты говоришь, вообще не имеет отношения к асинхронности. Никакого от слова совсем. Если хочешь выполнять тяжёлую CPU Bound работу, не влияя на UI, ты должен запустить задачу background потоке руками. Асинк эту задачу не решает.


refregНадо было сделать по умолчанию false. Было бы более логично...

Ни в коем случае. Не логично ни разу :) false нужен только для писателей библиотек, а основная масса разрабов это прикладные разработчики.
...
Рейтинг: 0 / 0
C# async... await
    #39574294
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt,
+1
...
Рейтинг: 0 / 0
C# async... await
    #39574357
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>skyANA, сегодня, 10:05 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1280515&msg=21054408][21054408]

>...Я в этом топике ничего ещё не предлагал...
Прочтите внимательно и вдумчиво, что Вы написали здесь .
Понимаю, что Вы имели ввиду это .
Я честно и пунктуально переписал две системы в Вашем классическом варианте. Но что-то давило - решил проверить подсчет и вывод в ProgresBar время построения выборки при Вашем подходе - await без Task.Run. И вляпался. Долго рылся в инете и ничего не нашел. Вернулся к своему варианту - await Task.Run. Но какая-то недосказанность осталась, поэтому и обратился к коллегам с вопросом топика.

>... "я не следую догмам"...
Да это правда - я не раб лампы, - разрабатываю сам, и сам отвечаю за свою разработку. Если мне подходит догма - использую.
...
Рейтинг: 0 / 0
C# async... await
    #39574363
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеевПонимаю, что Вы имели ввиду это .
Вы там не догадались, что код обсуждают в топике программистов.
Вы там смешали свой вопрос, строить ли веб и конкретный код на шарпе.
...
Рейтинг: 0 / 0
C# async... await
    #39574374
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А тут вы мешаете чтение ридером и обратный вызов в кавычах.

Код: c#
1.
2.
3.
using (reader = (OracleDataReader)await command.ExecuteReaderAsync()) {
          //-- Формируем коллекцию из выборки
          sp(RowToEntity); //-- Обратный вызов}


Осторожнее с обратным вызовом между потоками.
...
Рейтинг: 0 / 0
C# async... await
    #39574385
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
sql_sel varchar2(2000) := '
  SELECT pk_Strana_Puska,nv,Strana_Puska,sk
  FROM tbl_Strani_Puskov
  WHERE (pk_Strana_Puska<>0)';
  sel1 varchar2(50) := ' AND Strana_Puska LIKE' || '''' || x_Strana_Puska || '''';

 begin
  if(x_Strana_Puska is not null) then
   sql_sel := sql_sel || sel1;
  end if;


Так же пол года назад там говорилось, что вместо приклеивания where условий,
Пишут and (param is null)....
...
Рейтинг: 0 / 0
C# async... await
    #39574429
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Petro123, сегодня, 12:36 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1280515&msg=21054899][21054899]

>...Осторожнее с обратным вызовом между потоками
Да не делаю этого
...
Рейтинг: 0 / 0
C# async... await
    #39574435
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttТо, о чём ты говоришь, вообще не имеет отношения к асинхронности. Никакого от слова совсем.
А ты упорно какую то книгу пересказываешь о "асинхронном вводе-выводе"

На код "асинхронности" sqlreadera

Код: 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.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
        private SqlDataReader RunExecuteReaderTds( CommandBehavior cmdBehavior, RunBehavior runBehavior, bool returnStream, bool async, int timeout, out Task task, bool asyncWrite, bool inRetry, SqlDataReader ds=null, bool describeParameterEncryptionRequest = false) {

            Debug.Assert(!asyncWrite || async, "AsyncWrite should be always accompanied by Async");



            if (ds == null && returnStream) {

                ds = new SqlDataReader(this, cmdBehavior);

            }



            Task reconnectTask = _activeConnection.ValidateAndReconnect(null, timeout);



            if (reconnectTask != null) {

                long reconnectionStart = ADP.TimerCurrent();

                if (async) {                    

                    TaskCompletionSource<object> completion = new TaskCompletionSource<object>();

                    _activeConnection.RegisterWaitingForReconnect(completion.Task);

                    _reconnectionCompletionSource = completion;

                    CancellationTokenSource timeoutCTS = new CancellationTokenSource();

                    AsyncHelper.SetTimeoutException(completion, timeout, SQL.CR_ReconnectTimeout, timeoutCTS.Token);

                    AsyncHelper.ContinueTask(reconnectTask, completion,

                        () => {

                            if (completion.Task.IsCompleted) {

                                return;

                            }

                            Interlocked.CompareExchange(ref _reconnectionCompletionSource, null, completion);

                            timeoutCTS.Cancel();

                            Task subTask;                            

                            RunExecuteReaderTds(cmdBehavior, runBehavior, returnStream, async, TdsParserStaticMethods.GetRemainingTimeout(timeout, reconnectionStart), out subTask, asyncWrite, inRetry, ds);

                            if (subTask == null) {

                                completion.SetResult(null);

                            }

                            else {

                                AsyncHelper.ContinueTask(subTask, completion, () => completion.SetResult(null));

                            }

                        }, connectionToAbort: _activeConnection);

                    task = completion.Task;

                    return ds;

                }

                else {

                    AsyncHelper.WaitForCompletion(reconnectTask, timeout, () => { throw SQL.CR_ReconnectTimeout(); });

                    timeout = TdsParserStaticMethods.GetRemainingTimeout(timeout, reconnectionStart);

                }

            }
...
Рейтинг: 0 / 0
C# async... await
    #39574441
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosА ты упорно какую то книгу пересказываешь о "асинхронном вводе-выводе"

ты увидел, как какие-то таски запускаются в бэкргаунде в твоём куске кода? :)
...
Рейтинг: 0 / 0
C# async... await
    #39574447
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttViPRosА ты упорно какую то книгу пересказываешь о "асинхронном вводе-выводе"

ты увидел, как какие-то таски запускаются в бэкргаунде в твоём куске кода? :)

В моем куске кода запускаются потоки и я их отслеживаю каждого и вижу что они делают.
В бакгроунде у меня запускается воркер (этого для UI достаточно), а он генерирует параллельные потоки загрузки данных.
...
Рейтинг: 0 / 0
C# async... await
    #39574454
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRoshVosttпропущено...


ты увидел, как какие-то таски запускаются в бэкргаунде в твоём куске кода? :)

В моем куске кода запускаются потоки и я их отслеживаю каждого и вижу что они делают.
В бакгроунде у меня запускается воркер (этого для UI достаточно), а он генерирует параллельные потоки загрузки данных.
Они между прочим тоже из пула, потому по умолчанию бакгроунд.
...
Рейтинг: 0 / 0
C# async... await
    #39574460
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRos,
А нафига нам тут портянки кода транспортного уровня?
...
Рейтинг: 0 / 0
C# async... await
    #39574467
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123ViPRos,
А нафига нам тут портянки кода транспортного уровня?
пшел нах
...
Рейтинг: 0 / 0
C# async... await
    #39574482
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
C# async... await
    #39574489
refreg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttrefregЕсли не конфигурировать поток, и вызвать код из UI, то UI будет постоянно задействоваться, что приводит к торможению UI, вплоть до полного зависания.То, о чём ты говоришь, вообще не имеет отношения к асинхронности. Никакого от слова совсем. Если хочешь выполнять тяжёлую CPU Bound работу, не влияя на UI, ты должен запустить задачу background потоке руками. Асинк эту задачу не решает.Почему идет отход от контекста? Вопрос был сформулирован четко: "Почему код не работает?" Вот и давайте ответим почему код не работает. И что надо сделать, что бы заработал.

hVosttrefregНадо было сделать по умолчанию false. Было бы более логично...
Ни в коем случае. Не логично ни разу :) false нужен только для писателей библиотек, а основная масса разрабов это прикладные разработчики.Вкусовщина. А я считаю что дополнительная обязанность (восстановление контекста), должна прописываться явно , А по-умолчанию, отключена
...
Рейтинг: 0 / 0
C# async... await
    #39574504
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>refreg, вчера, 18:50 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1280515&msg=21053247] [21053247]
>Попробуй везде ....
Провел эксперимент:
1. Тормознул хранимку на 15 сек.
2. На строку с sp(RowToEntity); поставил точку останова
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
    //-- Выполнение хранимой процедуры
    public static async Task Entity_SP(string spname, dlg_sp sp, OracleParameter[] asp, dlg_RowToEntity RowToEntity) {
      nRow = 0;  //-- Число строк в выборке
      reader = null;

      using (OracleConnection connection = new OracleConnection(гп.str_Соединение)) {
        connection.Open();
        OracleCommand command = new OracleCommand("", connection);
        command.Parameters.Clear();
        command.Parameters.AddRange(asp);
        command.CommandText = spname;
        command.CommandType = CommandType.StoredProcedure;

        using (reader = (OracleDataReader)await command.ExecuteReaderAsync()) {
          //-- Формируем коллекцию из выборки
[color=red]          sp(RowToEntity); //-- Обратный вызов  [/color]        }
      }
    }
  }


3. Запустил приложение - таймер не работает

В случае await Task.Run имеем штатную работу таймера
...
Рейтинг: 0 / 0
C# async... await
    #39574510
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев,
А где использование ридера?
...
Рейтинг: 0 / 0
C# async... await
    #39574514
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Petro123, сегодня, 15:41 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1280515&msg=21055580][21055580]

>А где использование ридера?
Так программа и не доходит до ридера, а таймер и не начинает работать. Не в ридере дело
...
Рейтинг: 0 / 0
C# async... await
    #39574517
refreg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев
Код: c#
1.
2.
3.
4.
5.
6.
7.
Debug.WriteLine(Thread.CurrentThread.ManagedThreadId);
using (reader = (OracleDataReader)await command.ExecuteReaderAsync()) {
Debug.WriteLine(Thread.CurrentThread.ManagedThreadId);
          //-- Формируем коллекцию из выборки
[color=red]          sp(RowToEntity); //-- Обратный вызов  [/color]        }
Debug.WriteLine(Thread.CurrentThread.ManagedThreadId);
      }

Что выдает Debug output?
...
Рейтинг: 0 / 0
C# async... await
    #39574518
refreg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев
Код: c#
1.
using (reader = (OracleDataReader)await command.ExecuteReaderAsync().ConfigureAwait(false)) {
...
Рейтинг: 0 / 0
C# async... await
    #39574520
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев>Petro123, сегодня, 15:41 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1280515&msg=21055580][21055580]

>А где использование ридера?
Так программа и не доходит до ридера, а таймер и не начинает работать. Не в ридере дело
Я и смотрю где у тебя стоит поток выполнения. В драйвере?
ПО ШАГАМ ПРОЙДИ.Орать надо.
...
Рейтинг: 0 / 0
C# async... await
    #39574524
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев,
Завернул бы ты всё вместе с коннектом к хренам собачьим в task.run и дело с концом.
...
Рейтинг: 0 / 0
C# async... await
    #39574525
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев,
На всякий случай F10 по шагам)))))
...
Рейтинг: 0 / 0
C# async... await
    #39574527
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, раньше ms к ораклу не умел дрова делать)
...
Рейтинг: 0 / 0
C# async... await
    #39574528
refreg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,

Выпей смекту, от словесного обычно не помагают, но кто знает, может те помогут
...
Рейтинг: 0 / 0
C# async... await
    #39574538
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
refregPetro123,

Выпей смекту, от словесного обычно не помагают, но кто знает, может те помогут
Тебя тоже можно послать.
...
Рейтинг: 0 / 0
C# async... await
    #39574600
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев
Код: plsql
1.
name 'java.lang.Thread.sleep( long )';


Без этой строки работает?
...
Рейтинг: 0 / 0
C# async... await
    #39574601
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>refreg, сегодня, 15:48 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1280515&msg=21055603][21055603]
Извини, но результат отрицательный.
Поставил точку останова в обработчике событий от таймера - сюда поток не доходит
...
Рейтинг: 0 / 0
C# async... await
    #39574607
refreg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев>refreg, сегодня, 15:48 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1280515&msg=21055603][21055603]
Извини, но результат отрицательный.
Поставил точку останова в обработчике событий от таймера - сюда поток не доходитВопрос был что выдает Debug Output?

Что за обработчик событий от таймера? Причем он здесь? Реши сначала одну проблему.
...
Рейтинг: 0 / 0
C# async... await
    #39574610
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев,
Тебе дали кучу действий для тестов. На неделю. Спокойно решай и приходи.
Если без той строки работает, а тормозя java процесс нет, то сам себе ССЗБ.
Не умеет ридер выдавать частями с ручником на 15 сек.
Потом, ты попрятал ридер, а он должен быть в контексте и на своём месте.
...
Рейтинг: 0 / 0
C# async... await
    #39574613
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>refreg, сегодня, 18:39 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1280515&msg=21056048] [21056048]
>Вопрос был что выдает Debug Output?
>Что за обработчик событий от таймера? Причем он здесь? Реши сначала одну проблему.
Какая разница, что выдаёт Debug Output? Поток до него не доходит, пока Oracle не выполнит хранимку. Он выполняет её 15 секунд.
ПрогресБар должен показать текущее значение счетчика таймера от 1 до 15 по секундно. Этого не наблюдается. И видимо, await без run не важно, какую долгоиграющую ветку он запускает, непременно блокирует обработку сообщений от таймера .
...
Рейтинг: 0 / 0
C# async... await
    #39574614
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев,
Ты собрался в хранимке строить временные таблички. Потом перебрасывать данные внутри базы, потом.....
И думаешь, что драйвер сразу вернет управление в код клиента?
Ты с головой дружишь?
...
Рейтинг: 0 / 0
C# async... await
    #39574618
refreg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеевКакая разница, что выдаёт Debug Output? Поток до него не доходит, пока Oracle не выполнит хранимку. Он выполняет её 15 секунд.Это есть великая тайна? Да уж... Ладно, я устал...
...
Рейтинг: 0 / 0
C# async... await
    #39574619
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Petro123, сегодня, 19:31 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1280515&msg=21056123][21056123]
>...Ты с головой дружишь?...
Включи мозг - таймер работает независимо (асинхронно) от драйвера.
По идее, await не должен блокировать обработку оконной очереди сообщений, иначе это task.wait.
...
Рейтинг: 0 / 0
C# async... await
    #39574625
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>refreg, сегодня, 19:38 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1280515&msg=21056140][21056140]
>Это есть великая тайна?...
1Debug = 2Debug = 1
...
Рейтинг: 0 / 0
C# async... await
    #39574628
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев>Petro123, сегодня, 19:31 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1280515&msg=21056123][21056123]
>...Ты с головой дружишь?...
Включи мозг - таймер работает независимо (асинхронно) от драйвера.
По идее, await не должен блокировать обработку оконной очереди сообщений, иначе это task.wait.
Кто тебе сказал?
Сдвиг окна, меню работает?
...
Рейтинг: 0 / 0
C# async... await
    #39574629
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеевawait не должен блокироватьэто только ОПЕРАТОР. Он один не работает.
...
Рейтинг: 0 / 0
C# async... await
    #39574631
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosВ моем куске кода запускаются потоки и я их отслеживаю каждого и вижу что они делают.
В бакгроунде у меня запускается воркер (этого для UI достаточно), а он генерирует параллельные потоки загрузки данных.

Это всё крайне занимательно, но при чём тут асинк?


ViPRosОни между прочим тоже из пула, потому по умолчанию бакгроунд.

Ну нет же.. ээх..
...
Рейтинг: 0 / 0
C# async... await
    #39574632
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
refregПочему идет отход от контекста? Вопрос был сформулирован четко: "Почему код не работает?" Вот и давайте ответим почему код не работает. И что надо сделать, что бы заработал.

Я дал ссылку, но ТС толи не осилил, толи просто не стал читать..


refregВкусовщина. А я считаю что дополнительная обязанность (восстановление контекста), должна прописываться явно , А по-умолчанию, отключена

Как же я ненавижу слово «вкусовщина», у меня иногда такое ощущение складывается, что некоторые программеры считают, что они на показе мод. Вот здесь в рюшечку, здесь в цветочек. Какая ещё вкусовщина, вы чего вообще?

Что касается восстановление контекста, если хорошенько погуглить, можно найти развёрнутые пояснение к такому дизайну и на стеке и в блогах майкрософт. И там вряд ли вы найдёте хоть один намёк на «вкусовщину». Даже у профессиональных дизайнеров «фломастеры» считается грязным ругательством, а тут повсеместно.. ну как так-то? ))
...
Рейтинг: 0 / 0
C# async... await
    #39574636
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttViPRosВ моем куске кода запускаются потоки и я их отслеживаю каждого и вижу что они делают.
В бакгроунде у меня запускается воркер (этого для UI достаточно), а он генерирует параллельные потоки загрузки данных.

Это всё крайне занимательно, но при чём тут асинк?


ViPRosОни между прочим тоже из пула, потому по умолчанию бакгроунд.

Ну нет же.. ээх..
я не знаю при чем тут асинк, он меня не волнует ни грамма
...
Рейтинг: 0 / 0
C# async... await
    #39574639
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt,

Тебе ответили за 2 минуты))) LOL
...
Рейтинг: 0 / 0
C# async... await
    #39574641
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosя не знаю при чем тут асинк, он меня не волнует ни грамма

потому что ты педалишь потоки и синкаешься с UI. и это всё на одного единственного пользователя. прям да... )))
...
Рейтинг: 0 / 0
C# async... await
    #39574645
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttViPRosОни между прочим тоже из пула, потому по умолчанию бакгроунд.

Ну нет же.. ээх..
...
Рейтинг: 0 / 0
C# async... await
    #39574649
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttViPRosя не знаю при чем тут асинк, он меня не волнует ни грамма

потому что ты педалишь потоки и синкаешься с UI. и это всё на одного единственного пользователя. прям да... )))

Да при чем тут пользователь?
С UI работает BGWorker, но он запускает еще кучу потоков своих для загрузки данных и они все независимо (АСИНХРОННО) друг от друга работают, а синхронизируются только через примитивы синхронизации
...
Рейтинг: 0 / 0
C# async... await
    #39574650
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Petro123, сегодня, 19:58 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1280515&msg=21056185] [21056185]
>Кто тебе сказал?...
Посмотри хотя бы здесь
...
Рейтинг: 0 / 0
C# async... await
    #39574655
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRos,

про картинку.. параллельная экзекуция это коненчо хорошо, но ты действуешь как слоняра в посудной лавке, танком стрижёшь газоны. хотя это всё не так заметно на фоне одного жирного пользователя-единоличника.

а теперь давай поговорим про сервер, обрабатывающий запросы, логику и всё-всё остальное тысяч и десятков тысяч пользователей. нужно как минимум по потоку на каждого пользователя. а учитывая твои аппетиты, то по 10 потоков. а это положит на лопатки сервак, моментально уйдёт в DOS. что делать? ставить их в ожидание? пусть ждут своей очереди, за каким-то экраном, и пусть неудачники падают с таймаутом ))

казалось бы, при чём тут асинки....
...
Рейтинг: 0 / 0
C# async... await
    #39574658
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosДа при чем тут пользователь?
С UI работает BGWorker, но он запускает еще кучу потоков своих для загрузки данных и они все независимо (АСИНХРОННО) друг от друга работают, а синхронизируются только через примитивы синхронизации

ты до сих пор не понимаешь концепцию асинхронности, и не воспринимаешь поток, как очень значимый ресурсоёмкий объект, у которого кроме синхронизации, обеспечивающих безопасность твоих данных, ещё есть и много чего другого. код, написанный полностью на async-ах позволяет очень здорово экономить на потоках, а не плодить их и раскидываться, словно это мусор.
...
Рейтинг: 0 / 0
C# async... await
    #39574659
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttViPRos,

про картинку.. параллельная экзекуция это коненчо хорошо, но ты действуешь как слоняра в посудной лавке, танком стрижёшь газоны. хотя это всё не так заметно на фоне одного жирного пользователя-единоличника.

а теперь давай поговорим про сервер, обрабатывающий запросы, логику и всё-всё остальное тысяч и десятков тысяч пользователей. нужно как минимум по потоку на каждого пользователя. а учитывая твои аппетиты, то по 10 потоков. а это положит на лопатки сервак, моментально уйдёт в DOS. что делать? ставить их в ожидание? пусть ждут своей очереди, за каким-то экраном, и пусть неудачники падают с таймаутом ))

казалось бы, при чём тут асинки....
да мне то это пофиг???
У меня клиент сервер - на стороне клиента то что видишь, а на стороне сервера - транзакции.
Или ты предлагаешь мне транзакции переписать?
Тогда нах мне СКЛ сервер?

Если для тебя основная фича асинк в том, что бы все работали последовательно в одном контексте:):):), то я не завидую твоим клиентам.
...
Рейтинг: 0 / 0
C# async... await
    #39574660
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttViPRosДа при чем тут пользователь?
С UI работает BGWorker, но он запускает еще кучу потоков своих для загрузки данных и они все независимо (АСИНХРОННО) друг от друга работают, а синхронизируются только через примитивы синхронизации

ты до сих пор не понимаешь концепцию асинхронности, и не воспринимаешь поток, как очень значимый ресурсоёмкий объект, у которого кроме синхронизации, обеспечивающих безопасность твоих данных, ещё есть и много чего другого. код, написанный полностью на async-ах позволяет очень здорово экономить на потоках, а не плодить их и раскидываться, словно это мусор.
Да ничего они не экономят, если в лействительности нет ожидания ввода-вывода.
Уж лучше было бы явно ввести потоки ввода/вывода и закончить эту вакханалию сакральными играми - "а в каком потоке этот асинхронный код будет выполняться".
...
Рейтинг: 0 / 0
C# async... await
    #39574662
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И у меня не потоки, а таски.
...
Рейтинг: 0 / 0
C# async... await
    #39574664
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosда мне то это пофиг???

а не должно быть.


ViPRosУ меня клиент сервер - на стороне клиента то что видишь, а на стороне сервера - транзакции.

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

ViPRosИли ты предлагаешь мне транзакции переписать?
Тогда нах мне СКЛ сервер?

ну двух-звенка заведомо ущербная и тянет только на очень простейшие ПК, какие-нибудь АРМ-ы там с однобитной логикой, завязанной целиком и полностью на хранимках.


ViPRosЕсли для тебя основная фича асинк в том, что бы все работали последовательно в одном контексте:):):), то я не завидую твоим клиентам.

асинк позволяет даже дохлому серверу пахать за десятерых, ну и это правильный подход в целом. хоть и не забесплатно.
...
Рейтинг: 0 / 0
C# async... await
    #39574666
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttасинк позволяет даже дохлому серверу пахать за десятерых, ну и это правильный подход в целом. хоть и не забесплатно.
дармовщины нет нигде
смотри как node.js загибается если обработка этих асинков на том же сервере
...
Рейтинг: 0 / 0
C# async... await
    #39574667
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев>Petro123, сегодня, 19:58 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1280515&msg=21056185] [21056185]
>Кто тебе сказал?...
Посмотри хотя бы здесь
я тебе вопросы задал, а ты мне ссылкой на вопрос.
Если туго с памятью, то:
- без строки в хранимке работает?
- меню работает? Тормозит-морозится интерфейс?
...
Рейтинг: 0 / 0
C# async... await
    #39574668
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosДа ничего они не экономят, если в лействительности нет ожидания ввода-вывода.

ну а что там ещё может быть??? ты там факториалы чтоли считаешь? или пережёвываешь гигабайты данных в ОЗУ? тогда действительно вопрос, нахрена тебе скул )))))


ViPRosУж лучше было бы явно ввести потоки ввода/вывода и закончить эту вакханалию сакральными играми - "а в каком потоке этот асинхронный код будет выполняться".

так и ввели очень давно, есть абстракция I/O потоков
...
Рейтинг: 0 / 0
C# async... await
    #39574669
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosИ у меня не потоки, а таски.

у тебя явный TPL, так что пофиг во что ты обернул задачу, ты плодишь потоки и ловишь все прелести синхронизации, в том числе с контекстом синхронизации и UI потоком
...
Рейтинг: 0 / 0
C# async... await
    #39574670
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosсмотри как node.js загибается если обработка этих асинков на том же сервере

как загибается? отлично справляется с тысячами запросов в одно рыло
...
Рейтинг: 0 / 0
C# async... await
    #39574673
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttViPRosДа ничего они не экономят, если в лействительности нет ожидания ввода-вывода.

ну а что там ещё может быть??? ты там факториалы чтоли считаешь? или пережёвываешь гигабайты данных в ОЗУ? тогда действительно вопрос, нахрена тебе скул )))))


ViPRosУж лучше было бы явно ввести потоки ввода/вывода и закончить эту вакханалию сакральными играми - "а в каком потоке этот асинхронный код будет выполняться".

так и ввели очень давно, есть абстракция I/O потоков

Да я еще хуже считаю - я считаю NP полную задачу построения оптимального расписания.
Надо явно что бы можно было назначить поток для обслуживания задач ввода/вывода.
...
Рейтинг: 0 / 0
C# async... await
    #39574674
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttViPRosсмотри как node.js загибается если обработка этих асинков на том же сервере

как загибается? отлично справляется с тысячами запросов в одно рыло

у меня много другой информации.
...
Рейтинг: 0 / 0
C# async... await
    #39574676
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttViPRosИ у меня не потоки, а таски.

у тебя явный TPL, так что пофиг во что ты обернул задачу, ты плодишь потоки и ловишь все прелести синхронизации, в том числе с контекстом синхронизации и UI потоком
да, блин, синхронизация все равно нужна, есть неразделяемые объекты. В ДатаТейбл, допустим, фиг два потока запишут одновременно.
...
Рейтинг: 0 / 0
C# async... await
    #39574677
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TPL именно для этого и сделан.
А вот если сделан был бы внутри ТПЛ автоматически не плодить потоки, если какой то поток ушел в I|O то было бы хорошо, но нифига такого нету.
...
Рейтинг: 0 / 0
C# async... await
    #39574679
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
все, я пас
...
Рейтинг: 0 / 0
C# async... await
    #39574681
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПС. А на картинке я не ТПЛ показывал, а то что потоки все BG
...
Рейтинг: 0 / 0
C# async... await
    #39574691
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Petro123,сегодня, 21:09 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1280515&msg=21056334][21056334]
>... Тормозит-морозится интерфейс? ...
Большое спасибо за вопрос - я в шоке и плакать, я туповат оказался - интерфейс морозится, причем, если уйду в окно другого приложения, назад вернуться не получается, пока работает асинхронный метод.
Может быть дело в том, что работаю в виртуалке?
...
Рейтинг: 0 / 0
C# async... await
    #39574692
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosДа я еще хуже считаю - я считаю NP полную задачу построения оптимального расписания.

Почему ты не делаешь этого там, где это делать удобнее всего: на сервере, с кешированием и всеми делами? Там же максимально быстрый канал с БД, без накладок, без задержек, если это вообще не делать в самой БД.


ViPRosНадо явно что бы можно было назначить поток для обслуживания задач ввода/вывода.

зачем?

ViPRosда, блин, синхронизация все равно нужна, есть неразделяемые объекты. В ДатаТейбл, допустим, фиг два потока запишут одновременно.

ну да, пока один пишет, другие будут вынуждены ждать и продолжать пожирать удерживать поток и пожирать ресурсы. это мы ещё не затрагиваем тему GC, который может заблочить твои потоки..


ViPRosА вот если сделан был бы внутри ТПЛ автоматически не плодить потоки, если какой то поток ушел в I|O то было бы хорошо, но нифига такого нету.

почему это нет? есть.. просто как только ты введёшь асинки, придётся переходить на семафоры для синхронизации потоков.
...
Рейтинг: 0 / 0
C# async... await
    #39574697
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев>Petro123,сегодня, 21:09 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1280515&msg=21056334][21056334]
>... Тормозит-морозится интерфейс? ...
Большое спасибо за вопрос - я в шоке и плакать, я туповат оказался - интерфейс морозится, причем, если уйду в окно другого приложения, назад вернуться не получается, пока работает асинхронный метод.
Может быть дело в том, что работаю в виртуалке?
Ну, я так и думал, раз таймер не работает.
Ты наверно ни разу не видел как часы компа не тикают когда зип файл зипуешь).
...
Вопросы то остались - БЕЗ СТРОКИ ЗАМОРОЗКИ JAVA В БД - РАБОТАЕТ?
...
Рейтинг: 0 / 0
C# async... await
    #39574701
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttViPRosДа я еще хуже считаю - я считаю NP полную задачу построения оптимального расписания.

Почему ты не делаешь этого там, где это делать удобнее всего: на сервере, с кешированием и всеми делами? Там же максимально быстрый канал с БД, без накладок, без задержек, если это вообще не делать в самой БД.


Первым делом так и было сделано - на сервере через CLR.
Но, сервер не пригоден для вычислений, тем более - графовых.
Сделал на сервере через CLR, получился однопоточная фигня медленная.

А тут тоже нет никаких накладок, задержек, а кешировать можно везде.
Ну, вощем, у меня нет проблем для обсуждения пока по части расчетов (в свое время - лет 7 назад были и я обращался по части оптимизации СКЛ запросов и люди помогали).
Быстрее и лучше меня никто пока что не считает из конкурентов.
...
Рейтинг: 0 / 0
C# async... await
    #39574702
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRos,

- на сервере через хранимки -
...
Рейтинг: 0 / 0
C# async... await
    #39574706
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Petro123, сегодня, 22:01 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1280515&msg=21056461][21056461]
>...Вопросы то остались...
У меня база данных отладочного комплекса на другой виртуалке.
На ней нет данных для долгоиграющего запроса. Приходится использовать java.
Но для await Task.Run всё работает и в случае задержки.
...
Рейтинг: 0 / 0
C# async... await
    #39574710
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев>Petro123, сегодня, 22:01 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1280515&msg=21056461][21056461]
>...Вопросы то остались...
У меня база данных отладочного комплекса на другой виртуалке.
На ней нет данных для долгоиграющего запроса. Приходится использовать java.
Но для await Task.Run всё работает и в случае задержки.
У тебя удивительная способность не отвечать на вопрос.
Не только мне, но и например, refreg допросился логи со второго раза.
...
Дак работает без той строки?
...
Рейтинг: 0 / 0
C# async... await
    #39574711
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев,
объясняю сразу в надцатый раз.
Я думаю что нельзя тестировать асинхронность ДРАЙВЕРА таким методом как у тебя.
Выше писал что генерация данных в оракле это одно sql выражение.
Если не знаешь как - спроси.
...
Рейтинг: 0 / 0
C# async... await
    #39574716
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Petro123, сегодня, 22:44 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1280515&msg=21056587][21056587]
>...Дак работает без той строки?
Странный вопрос, а что именно работает? - если таймер, то нет
...
Рейтинг: 0 / 0
C# async... await
    #39574718
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеевСтранный вопрос, а что именно работает? - если таймер, то нет
я это и спрашивал.
Т.е. есть та строка или нет - таймер не работает в обоих случаях.
Второй вопрос - выше ссылку на код Алексея видел?
Дело твоё, но можешь проверить его код.
Если не работает, то у тебя нет вариантов - мой вариант из моего проекта или твой await-вариант.
Логично?
...
Рейтинг: 0 / 0
C# async... await
    #39574719
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Petro123, сегодня, 22:57 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1280515&msg=21056621][21056621]
>...Я думаю что нельзя тестировать асинхронность ДРАЙВЕРА таким методом как у тебя.
Причем здесь ДРАЙВЕР - я задерживаю выполнение хранимки.
Да и какая нахрен разница - можно запустить любой асинхронный метод без применения await Task.Run - метод таймера не работает, как не работает любой другой метод обработки сообщения, за исключением асинхронного.
...
Рейтинг: 0 / 0
C# async... await
    #39574721
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеевПричем здесь ДРАЙВЕР - я задерживаю выполнение хранимки.
уже ни при чём. Ты долго отвечаешь на вопросы.
...
Рейтинг: 0 / 0
C# async... await
    #39574726
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OFF
Ну а если поболтать, только ты не отвлекайся)), то БД строит план выполнения запроса, потом подымает кэш.
Если ты тормознул процесс, то он не даст на клиента ничего как раз эти 15 сек.
Но ты не отвлекайся).
...
Рейтинг: 0 / 0
C# async... await
    #39574728
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Petro123, сегодня, 23:16 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1280515&msg=21056663][21056663]
>...Логично? ...
Логично.
Можно использовать Task.Wait(TimeSpan), но лишняя возня.
...
Рейтинг: 0 / 0
C# async... await
    #39574729
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Petro123, сегодня, 23:25 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1280515&msg=21056684] [21056684]
>...Если ты тормознул процесс, то он не даст на клиента ничего как раз эти 15 сек...
Так это мне и надо - ПрогресБар покажет полоску в 15 секунд - время выполнения хранимки
...
Рейтинг: 0 / 0
C# async... await
    #39574731
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеевМожно использовать Task.Wait
только не приставай ко мне с этим старьём)). Я сразу на новое прыгнул).
...
ВМоисеевТак это мне и надо - ПрогресБар покажет полоску в 15 секунд - время выполнения хранимки
какой ты тупой!
15 сек не возвращается код в клиента от БД т.к. там стоит sleep()
Код ушёл в драйвер и БД. Ни разу не видел?
Сделай код от Алексея.
...
Рейтинг: 0 / 0
C# async... await
    #39574739
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Petro123, сегодня, 23:38 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1280515&msg=21056703] [21056703]
>...какой ты тупой!
Ну какой же ты тупой. Счет секундам(времени) ведет таймер приложения и его счетчик показывает ПрогресБар. Каждую секунду полоска увеличивается. Для этих целей мне по барабану, что хранимка пока не отвечает, как ответит - остановлю таймер, скрою ПрогресБар и начну обработку списка сущностей.
...
Рейтинг: 0 / 0
C# async... await
    #39574740
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеевмне по барабану, что хранимка пока не отвечает,
сделай dll c кодом sleep() или циклом for 0 - 100000
И запусти из exe шника.
Будет таймер показывать на экране?
...
Рейтинг: 0 / 0
C# async... await
    #39574741
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123 Сделай код от Алексея.
и не OFFTOP про теорию потоков
...
Рейтинг: 0 / 0
C# async... await
    #39574742
SirYouGin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В Oracle для задержки есть родной DBMS_LOCK.SLEEP(seconds IN NUMBER).
ВМоисеев>ВМоисеев, сегодня, 18:41 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1280515&msg=21053225][21053225]
Раньше не мог аккуратно тестировать хранимую процедуру Oracle - не знал как реализовать задержку.
Спасибо коллеге за процедуру:
-- Задержка
Код: plsql
1.
2.
3.
 procedure my_sleep( p_sleep in number )
 as language java
 name 'java.lang.Thread.sleep( long )';


Теперь могу тестировать и так:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
 -- Выборка из таблицы Strani_Puskov с параметрами
 procedure Strani_Puskov_Sql(
   cur_viborka out t_cursor
   ,x_Strana_Puska in varchar2
 )
 as
  sql_sel varchar2(2000) := '
  SELECT pk_Strana_Puska,nv,Strana_Puska,sk
  FROM tbl_Strani_Puskov
  WHERE (pk_Strana_Puska<>0)';
  sel1 varchar2(50) := ' AND Strana_Puska LIKE' || '''' || x_Strana_Puska || '''';

 begin
  if(x_Strana_Puska is not null) then
   sql_sel := sql_sel || sel1;
  end if;

  sql_sel := sql_sel || ' ORDER BY SK,Strana_Puska';

  -- Тест
  [color=red]my_sleep(9000);[/color]

  open cur_viborka for sql_sel;
 end Strani_Puskov_Sql;
...
Рейтинг: 0 / 0
C# async... await
    #39574744
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Petro123, сегодня, 00:00 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1280515&msg=21056756] [21056756]
>...Будет таймер показывать на экране?
Твой пример не связан с вводом/выводом
...
Рейтинг: 0 / 0
C# async... await
    #39574745
SirYouGin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Попробуй поменять методы в wsp так:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
    public static Task Entity_SP(string spname, dlg_sp sp, OracleParameter[] asp, dlg_RowToEntity RowToEntity) {
           return Task.Run(()=>Entity_SP_sync(spname, sp, asp, RowToEntity));
    }
    //-- Выполнение хранимой процедуры
    public static void Entity_SP_sync(string spname, dlg_sp sp, OracleParameter[] asp, dlg_RowToEntity RowToEntity) {
      nRow = 0;  //-- Число строк в выборке
      reader = null;

      using (OracleConnection connection = new OracleConnection(гп.str_Соединение)) {
        connection.Open();
        OracleCommand command = new OracleCommand("", connection);
        command.Parameters.Clear();
        command.Parameters.AddRange(asp);
        command.CommandText = spname;
        command.CommandType = CommandType.StoredProcedure;

        using (reader = (OracleDataReader)await command.ExecuteReader()) {
          //-- Формируем коллекцию из выборки
          sp(RowToEntity); //-- Обратный вызов
        }
      }
    }



Вызов прежний:
Код: c#
1.
await wsp.Entity_SP(ИмяХП, sp, asp, RowToEntity);


Таймер должен заработать.
ВМоисеевКоллеги, помогите разобраться.
Разрабатываю приложения работы с базой данных Oracle.
Запросы могут быть долгоиграющими, поэтому на время его выполнения подключаю таймер и отражаю время в прогресс баре.
- Ситуация 1: здесь и далее - await wsp.Entity_SP(ИмяХП, sp, asp, RowToEntity);- вызов хранимой процедуры
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
      . . .
      при.tmrStart(); //-- Пуск таймера 
      try { await wsp.Entity_SP(ИмяХП, sp, asp, RowToEntity); }
      catch (System.InvalidOperationException ex) { throw new Exception(ex.Message); }
      catch (Exception ex) {
        при.tmrStop();
        MessageBox.Show(ex.Message, caption_Entity, MessageBoxButton.OK);
        bl_Разрешение = true;     //-- Разрешение выполнения функционала компонент
        return;
      }
      при.tmrStop();  //-- Останов таймера
      . . .

======= ПрогрессБар не работает.

- Ситуация 2:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
      . . .
      при.tmrStart(); //-- Пуск таймера 
      await Task.Run(() => wsp.Entity_SP(ИмяХП, sp, asp, RowToEntity));
      if (wsp.wspErr != null) {
        при.tmrStop();
        MessageBox.Show(wsp.wspErr, caption_Entity, MessageBoxButton.OK);
        bl_Разрешение = true;     //-- Разрешение выполнения функционала компонент
        return;
      }
      при.tmrStop();
      . . .

======= ПрогрессБар штатно.

Дискуссия состоялась здесь
...
Рейтинг: 0 / 0
C# async... await
    #39574774
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Petro123, сегодня, 00:00 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1280515&msg=21056756][21056756]

>...Будет таймер показывать на экране?
Ваш вопрос возбудил смутные подозрения, а асинхронны ли асинхронные методы девартовского дравера. Попробую подергать асинхронные методы SQL Server- а
...
Рейтинг: 0 / 0
C# async... await
    #39574786
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SirYouGinПопробуй поменять методы в wsp так:
То что task.run работает, он знает с 1 страницы. Он так не хочет.

2.Не цитируй много текста.
...
Рейтинг: 0 / 0
C# async... await
    #39574787
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеевПопробую подергать асинхронные методы SQL Server- адавно пора. Приходи через полгода как в прошлый раз.
...
Рейтинг: 0 / 0
C# async... await
    #39574818
refreg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев>Petro123, сегодня, 00:00 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1280515&msg=21056756][21056756]

>...Будет таймер показывать на экране?
Ваш вопрос возбудил смутные подозрения, а асинхронны ли асинхронные методы девартовского дравера. Попробую подергать асинхронные методы SQL Server- аМда... Наконец-то, я же именно это у тя и хотел проверить, когда просил о выводе Debug.Output... И про то, что драйвер может быть не-асинхронный, несмотря на постфикс "Async", говорилось несколько раз.
...
Рейтинг: 0 / 0
C# async... await
    #39574820
refreg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttrefregВкусовщина. А я считаю что дополнительная обязанность (восстановление контекста), должна прописываться явно , А по-умолчанию, отключена

Как же я ненавижу слово «вкусовщина», у меня иногда такое ощущение складывается, что некоторые программеры считают, что они на показе мод. Вот здесь в рюшечку, здесь в цветочек. Какая ещё вкусовщина, вы чего вообще?

Что касается восстановление контекста, если хорошенько погуглить, можно найти развёрнутые пояснение к такому дизайну и на стеке и в блогах майкрософт. И там вряд ли вы найдёте хоть один намёк на «вкусовщину». Даже у профессиональных дизайнеров «фломастеры» считается грязным ругательством, а тут повсеместно.. ну как так-то? ))Что-то тя понесло, всегда есть договоренности, компромиссы, неоднозначности - это если у тя реакция именно на это слово. Неоднозначных решений очень много. Например, почему DateTime.Now - это свойство, а не метод. Да и сам ты недавно из штанов выпрыгивал по поводу, как в .net сделаны потоки (stream).
...
Рейтинг: 0 / 0
C# async... await
    #39574844
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>ВМоисеев, 19 дек 17, 19:41 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1280515&msg=21046801][21046801]

Для Microsoft SQL Server ПрогресБар работает штатно и для Ситуации 1 и для Ситуации 2
...
Рейтинг: 0 / 0
C# async... await
    #39574846
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев>ВМоисеев, 19 дек 17, 19:41 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1280515&msg=21046801][21046801]

Для Microsoft SQL Server ПрогресБар работает штатно и для Ситуации 1 и для Ситуации 2
...
Рейтинг: 0 / 0
C# async... await
    #39574849
SirYouGin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВМоисеев>ВМоисеев, 19 дек 17, 19:41 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1280515&msg=21046801][21046801]

Для Microsoft SQL Server ПрогресБар работает штатно и для Ситуации 1 и для Ситуации 2


Тогда, возможно, стоит попробовать родные компоненты от Oracle http://www.oracle.com/technetwork/topics/dotnet/index-085163.html
...
Рейтинг: 0 / 0
C# async... await
    #39574852
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SirYouGin,
странно что он до сих пор не пробовал.
Ещё со времён ADO\MDAC для оракла берут родные дрова.
...
Рейтинг: 0 / 0
C# async... await
    #39574895
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosПервым делом так и было сделано - на сервере через CLR.
Но, сервер не пригоден для вычислений, тем более - графовых.
Сделал на сервере через CLR, получился однопоточная фигня медленная.

Ну фиг его знает... я как-то делал расчёт расписания для врачей, поиск оптимального времени для записи, при чём надо было искать среди огромной кучи постоянно меняющихся временных интервалов, с учётом пожелания клиента: строгий и мягкий учёт, типа +/- и куча атрибутов, учёт пожелания врачей и группировка по направлениям, и весу. В начале делал через графы. Это было медленно. Нашёл как оптимизировать, это работало быстро, но такой код невозможно сопровождать, поддерживать и тестировать. Такие решения я сразу отправляю в утиль. Переделал на избыточность в данных, получилось решение чисто на SQL запросах, без хранимых процедур, пздца в коде без параллельных вычислений, работает молниеносно и легко поддерживается.

Вообще, избыточность рулит. Именно поэтому я до беспамятства влюбился в CQRS/ES.
...
Рейтинг: 0 / 0
C# async... await
    #39574896
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
refregЧто-то тя понесло, всегда есть договоренности, компромиссы, неоднозначности - это если у тя реакция именно на это слово. Неоднозначных решений очень много. Например, почему DateTime.Now - это свойство, а не метод. Да и сам ты недавно из штанов выпрыгивал по поводу, как в .net сделаны потоки (stream).

У меня реакция такая. Когда пойдёшь к врачу и он тебе операцию на желудок будет делать через глаз, потому что это, ну знаешь, вкусовщина, я посмотрю на реакцию. Здесь так же, для каждого выбранного решения должна быть определённая причина. Вкусовщина, это детский сад. Даже у определённых стилей наименования переменных, для выбора отступов, в каждой адекватной конторе есть определённые правила, и вкусовщина нихрена не катит.

Я со многими решениями, сделанными в FCL не согласен. Но также я понимаю, что если бы сам его проектировал с нуля, то наделал бы много косяков, от ошибок проектирования никто не застрахован, просто тогда для решения нехватало данных и опирались на то, что есть.
...
Рейтинг: 0 / 0
C# async... await
    #39574922
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OFF
hVosttя до беспамятства влюбился в CQRS/ES.
ты осторожнее с любовью.
Этот принцип проектирования, который ставит на уши всю систему, имеет много противопоказаний.
Лучше бы ты парочку технологий любил. Как истинный самец (с) )))
...
Рейтинг: 0 / 0
C# async... await
    #39575044
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,

серебряной пули не существует, я знаю
...
Рейтинг: 0 / 0
C# async... await
    #39575068
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttНу фиг его знает... я как-то делал расчёт расписания для врачей, поиск оптимального времени для записи, при чём надо было искать среди огромной кучи постоянно меняющихся временных интервалов, с учётом пожелания клиента: строгий и мягкий учёт, типа +/- и куча атрибутов, учёт пожелания врачей и группировка по направлениям, и весу. В начале делал через графы. Это было медленно. Нашёл как оптимизировать, это работало быстро, но такой код невозможно сопровождать, поддерживать и тестировать. Такие решения я сразу отправляю в утиль. Переделал на избыточность в данных, получилось решение чисто на SQL запросах, без хранимых процедур, пздца в коде без параллельных вычислений, работает молниеносно и легко поддерживается.

Вообще, избыточность рулит. Именно поэтому я до беспамятства влюбился в CQRS/ES.

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

Информация не теряет актуальности, почитай про Event Sourcing.

ViPRosЕсли бы можно был оптимизационную задачу решить "молниеносно", то ты бы был миллиардером.

Да с фига ли. Ты же решил как-то, чё стал миллионером?
...
Рейтинг: 0 / 0
C# async... await
    #39575108
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttViPRosИзбыточность тоже надо сначала рассчитывать (предвычисления), хорошо когда эта информация не теряет актуальности относительно долго (это обычно не так).

Информация не теряет актуальности, почитай про Event Sourcing.

ViPRosЕсли бы можно был оптимизационную задачу решить "молниеносно", то ты бы был миллиардером.

Да с фига ли. Ты же решил как-то, чё стал миллионером?

Да при чем тут ES, как он может мне помочь раздобыть несуществующую информацию, обновить устаревшую?
Ну, я эту задачу решал итерационно всю свою прогерскую жизнь и все еще тружусь - нескончаемая задача
...
Рейтинг: 0 / 0
C# async... await
    #39575117
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosДа при чем тут ES, как он может мне помочь раздобыть несуществующую информацию, обновить устаревшую?

вот если тебе лень почитать про ES, почему я должен тебе его пересказывать? он отвечает на твой вопрос.


ViPRosНу, я эту задачу решал итерационно всю свою прогерскую жизнь и все еще тружусь - нескончаемая задача

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

открой теорию расписаний, выбери любую задачу и реши - тогда поговорим
...
Рейтинг: 0 / 0
C# async... await
    #39575124
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosоткрой теорию расписаний, выбери любую задачу и реши - тогда поговорим

OLAP
...
Рейтинг: 0 / 0
C# async... await
    #39575128
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttViPRosоткрой теорию расписаний, выбери любую задачу и реши - тогда поговорим

OLAP

:)
...
Рейтинг: 0 / 0
317 сообщений из 317, показаны все 13 страниц
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / C# async... await
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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