powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Выборка из базы данных в несколько потоков
25 сообщений из 129, страница 4 из 6
Выборка из базы данных в несколько потоков
    #38083361
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVaГде там ThreadPool.RegisterWaitForSingleObject ?

Из рефлектора:
Код: 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.
internal static Task<TResult> FromAsyncImpl(Func<AsyncCallback, object, IAsyncResult> beginMethod, Func<IAsyncResult, TResult> endMethod, object state, TaskCreationOptions creationOptions)
{
    AsyncCallback callback = null;
    if (beginMethod == null)
    {
        throw new ArgumentNullException("beginMethod");
    }
    if (endMethod == null)
    {
        throw new ArgumentNullException("endMethod");
    }
    TaskFactory.CheckFromAsyncOptions(creationOptions, true);
    TaskCompletionSource<TResult> tcs = new TaskCompletionSource<TResult>(state, creationOptions);
    try
    {
        if (callback == null)
        {
            callback = delegate (IAsyncResult iar) {
                TaskFactory<TResult>.FromAsyncCoreLogic(iar, endMethod, tcs);
            };
        }
        beginMethod(callback, state);
    }
    catch
    {
        tcs.TrySetResult(default(TResult));
        throw;
    }
    return tcs.Task;
}

private static void FromAsyncCoreLogic(IAsyncResult iar, Func<IAsyncResult, TResult> endMethod, TaskCompletionSource<TResult> tcs)
{
    Exception exception = null;
    OperationCanceledException exception2 = null;
    TResult result = default(TResult);
    try
    {
        result = endMethod(iar);
    }
    catch (OperationCanceledException exception3)
    {
        exception2 = exception3;
    }
    catch (Exception exception4)
    {
        exception = exception4;
    }
    finally
    {
        if (exception2 != null)
        {
            tcs.TrySetCanceled();
        }
        else if (exception != null)
        {
            if (tcs.TrySetException(exception) && (exception is ThreadAbortException))
            {
                tcs.Task.m_contingentProperties.m_exceptionsHolder.MarkAsHandled(false);
            }
        }
        else
        {
            tcs.TrySetResult(result);
        }
    }
}
...
Рейтинг: 0 / 0
Выборка из базы данных в несколько потоков
    #38083379
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лёня, задам те вопрос как человеку, недавно вышедшему из отпуска со свежей, как говорится, головой на плечах :)

Не кажется ли, что тарахтушка Сева опять обделалась?
...
Рейтинг: 0 / 0
Выборка из базы данных в несколько потоков
    #38083386
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
столько поноса в 1 теме из за какой то много-поточности, для которой в dotNet есть 100500 классов, начиная от Thread и заканчивая самыми изощренными... ЗАЧЕМ?
...
Рейтинг: 0 / 0
Выборка из базы данных в несколько потоков
    #38083391
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУЛёня, задам те вопрос как человеку, недавно вышедшему из отпуска со свежей, как говорится, головой на плечах :)

Не кажется ли, что тарахтушка Сева опять обделалась? "Трудно быть вежливым если ты прав" (с)
...
Рейтинг: 0 / 0
Выборка из базы данных в несколько потоков
    #38083395
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Mejtes, если МСУ и SeVa в одном топике пишут, то последний превращается в срач автоматически. Забей
...
Рейтинг: 0 / 0
Выборка из базы данных в несколько потоков
    #38083532
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КМСУЛёня, задам те вопрос как человеку, недавно вышедшему из отпуска со свежей, как говорится, головой на плечах :)

Не кажется ли, что тарахтушка Сева опять обделалась? "Трудно быть вежливым если ты прав" (с)

Вежливый ты мой. Ты не там копаешь.

Теперь посмотри на TaskFactory.ContinueWhenAll(tasks, tt => /* Готово */) в своем коде.
...
Рейтинг: 0 / 0
Выборка из базы данных в несколько потоков
    #38083564
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сева опять обкакалсяМСУSeVaпропущено...


Вот и Гнидка пожаловала с очередной порцией слизи. Нашел фоновые потоки для тасков? Извратность твоих хаотичных мыслишек в впереди планеты всей. Кроме тебя мало бы кто до этого додумался

Твоему гнустному умишке с гнилыми потрохами мозгов я подготовил примерчик для первоклашек. Осилишь?

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
class Program
{
    static void Main(string[] args)
    {
        FooAsync().Wait();
        Console.WriteLine(Thread.CurrentThread.ManagedThreadId);
        Console.Read();
    }

    private async static Task FooAsync() 
    {
        await Task.Delay(1000);
        Console.WriteLine(Thread.CurrentThread.ManagedThreadId);
    }
}



Что скажешь, марамойка, почему я получу разные идентификаторы тредов?
SeVa, марамойка ты наша форумная, есть что сказать по поводу "извратности моих хаотичных мыслишек"? Опять опкакалсо, неуч? :)
...
Рейтинг: 0 / 0
Выборка из базы данных в несколько потоков
    #38083613
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУ+
Сева опять обкакалсяМСУпропущено...

Твоему гнустному умишке с гнилыми потрохами мозгов я подготовил примерчик для первоклашек. Осилишь?

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
class Program
{
    static void Main(string[] args)
    {
        FooAsync().Wait();
        Console.WriteLine(Thread.CurrentThread.ManagedThreadId);
        Console.Read();
    }

    private async static Task FooAsync() 
    {
        await Task.Delay(1000);
        Console.WriteLine(Thread.CurrentThread.ManagedThreadId);
    }
}



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

SeVa, марамойка ты наша форумная, есть что сказать по поводу "извратности моих хаотичных мыслишек"? Опять опкакалсо, неуч? :)

Глупая, бездумная обезьянка, а что доказывает твой тупой тест ни о чем?
Продолжаешь гадить себе на голову?
Попроси взрослых написать правильный тест.
...
Рейтинг: 0 / 0
Выборка из базы данных в несколько потоков
    #38083616
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVaТеперь посмотри на TaskFactory.ContinueWhenAll(tasks, tt => /* Готово */) в своем коде.До этого речь шла про FromAsync . Ты уж определись. А то так и будем весь System.Threading.Task сюда из рефлектора постить. Впрочем - давай. Теперь твоя очередь. :-)
...
Рейтинг: 0 / 0
Выборка из базы данных в несколько потоков
    #38083639
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVaМСУ++
Сева опять обкакалсяпропущено...

SeVa, марамойка ты наша форумная, есть что сказать по поводу "извратности моих хаотичных мыслишек"? Опять опкакалсо, неуч? :)

Глупая, бездумная обезьянка, а что доказывает твой тупой тест ни о чем?
Продолжаешь гадить себе на голову?
Попроси взрослых написать правильный тест.
Этот тест в очередной раз доказывает, что ты унылая кодо-кухарка со всяческим отсутствием интеллекта. Заруби себе топором на своем тупорылом мозге, асинк авэйт - это синтаксический сахар, не более того. Очень замороченный в реализации, но таки сахар, который поет свои песни в отдельном потоке, играя на бубенцах мелодичные ритмы для так простофиль и обормотов-двоешников типа тебя.
Сегодня опять двойка, вон из класса.
...
Рейтинг: 0 / 0
Выборка из базы данных в несколько потоков
    #38083691
beg-in-er
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУ асинк авэйт - это синтаксический сахар, не более того. Очень замороченный в реализации, но таки сахар, который поет свои песни в отдельном потоке

но люди читают это и видят совершенно другое. автор http://msdn.microsoft.com/ru-ru/magazine/hh456403.aspx
асинхронные методы не планируют новые потоки — они позволяют выполнять вычисления в существующих потоках;
как тут не получить разрыв шаблона.
...
Рейтинг: 0 / 0
Выборка из базы данных в несколько потоков
    #38083712
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
beg-in-erкак тут не получить разрыв шаблона.Достаточно знать про ThreadPool.
...
Рейтинг: 0 / 0
Выборка из базы данных в несколько потоков
    #38083722
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КSeVaТеперь посмотри на TaskFactory.ContinueWhenAll(tasks, tt => /* Готово */) в своем коде.До этого речь шла про FromAsync . Ты уж определись. А то так и будем весь System.Threading.Task сюда из рефлектора постить. Впрочем - давай. Теперь твоя очередь. :-)

Реализации FromAsync я и без тебя видел, они были еще в Rx задолго до тасков.
Речь идет о том, что async\await - конечный автомат, который не блокирует поток, как это делается в Wait'ax для тасков или Thread'ax.
Это совсем новая модель и совсем другое кино.

Вот правильный вариант теста, который постил наш дебиленок.

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
 static void Main(string[] args)
        {
            Console.WriteLine("Main before {0}",Thread.CurrentThread.ManagedThreadId);
            FooAsync().Wait();
            Console.WriteLine("Main after {0}", Thread.CurrentThread.ManagedThreadId);
            Console.Read();
        }

        private async static Task FooAsync()
        {
            Console.WriteLine("Foo before {0}", Thread.CurrentThread.ManagedThreadId);
            await Task.Delay(1000);
            Console.WriteLine("Foo after {0}", Thread.CurrentThread.ManagedThreadId);
        }


Results
Код: c#
1.
2.
3.
4.
Main before 8
Foo before 8
Foo after 10
Main after 8



Те первый wait в Main блокирующий и выполнение идет в одном потоке, а c await Этого не происходит
...
Рейтинг: 0 / 0
Выборка из базы данных в несколько потоков
    #38083728
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
beg-in-erМСУ асинк авэйт - это синтаксический сахар, не более того. Очень замороченный в реализации, но таки сахар, который поет свои песни в отдельном потоке

но люди читают это и видят совершенно другое. автор http://msdn.microsoft.com/ru-ru/magazine/hh456403.aspx
асинхронные методы не планируют новые потоки — они позволяют выполнять вычисления в существующих потоках;
как тут не получить разрыв шаблона.

beg-in-er, не трать время зря, если этому му**ку что-то втемяшилось, то это уже не вышибить.
Он любит гадить себе на голову, при этом считает, что выглядит очень красиво и умно
...
Рейтинг: 0 / 0
Выборка из базы данных в несколько потоков
    #38083734
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
beg-in-erкак тут не получить разрыв шаблона.

...Другие контексты планирования являются многопоточными; в частности, стандартный пул потоков представлен одним контекстом планирования. Когда в нем планируется новая работа, она может быть выполнена в любом потоке из пула. Таким образом, асинхронный метод, начавший работать в пуле потоков, там же ее и продолжит, хотя при этом не исключена его «переброска» между разными потоками.

...На практике единой концепции для контекста планирования нет. Грубо говоря, SynchronizationContext потока действует как его контекст планирования. Поэтому, если у потока есть один из SynchronizationContext (существующая концепция, которая может быть реализована пользователем), он и будет использоваться. А если нет, тогда применяется TaskScheduler потока (аналогичная концепция, введенная TPL). Если у него нет ни того, ни другого, будет задействован TaskScheduler по умолчанию — он планирует возобновления в стандартном пуле потоков.

Но всё это теория от "менеджера программ в группе Microsoft C# and Visual Basic Language", которому наскоряк набили текст такие двоешники как Сева. Всегда поднимается новый поток, это наглядно иллюстрирует мой код.
...
Рейтинг: 0 / 0
Выборка из базы данных в несколько потоков
    #38083742
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУbeg-in-erкак тут не получить разрыв шаблона.

...Другие контексты планирования являются многопоточными; в частности, стандартный пул потоков представлен одним контекстом планирования. Когда в нем планируется новая работа, она может быть выполнена в любом потоке из пула. Таким образом, асинхронный метод, начавший работать в пуле потоков, там же ее и продолжит, хотя при этом не исключена его «переброска» между разными потоками.

...На практике единой концепции для контекста планирования нет. Грубо говоря, SynchronizationContext потока действует как его контекст планирования. Поэтому, если у потока есть один из SynchronizationContext (существующая концепция, которая может быть реализована пользователем), он и будет использоваться. А если нет, тогда применяется TaskScheduler потока (аналогичная концепция, введенная TPL). Если у него нет ни того, ни другого, будет задействован TaskScheduler по умолчанию — он планирует возобновления в стандартном пуле потоков.

Но всё это теория от "менеджера программ в группе Microsoft C# and Visual Basic Language", которому наскоряк набили текст такие двоешники как Сева. Всегда поднимается новый поток, это наглядно иллюстрирует мой код.

му**к, это Net 4.0
...
Рейтинг: 0 / 0
Выборка из базы данных в несколько потоков
    #38083753
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVaму**к, это Net 4.0
Дибилоид, async await появился в 4.5, в статье как-раз приводятся примеры:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
static async Task<byte[]> TryFetchAsync(string url)
{
  var client = new WebClient();
  try
  {
    return await client.DownloadDataTaskAsync(url);
  }
  catch (WebException) { }
  return null;
}



Опять кухарка обделалась.
...
Рейтинг: 0 / 0
Выборка из базы данных в несколько потоков
    #38083757
beg-in-er
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Выборка из базы данных в несколько потоков
    #38083758
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVaРеализации FromAsync я и без тебя видел, они были еще в Rx задолго до тасков.
Речь идет о том, что async\await - конечный автомат, который не блокирует поток, как это делается в Wait'ax для тасков или Thread'ax.
Это совсем новая модель и совсем другое кино.У нас задача про "запрос в базу". Значит в первую очередь задействован IO Completion Port и его пул потоков (не путать с ThreadPool class). А всё остальное (Task, кодогенерация async/await и т. п) это удобные бантики, мало влияющие на производительность в данном случае. Пусть даже в новой асинхронной модели есть экономия на WaitHandle-ах, но в данном случае это "экономия на спичках".
...
Рейтинг: 0 / 0
Выборка из базы данных в несколько потоков
    #38083772
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVaРечь идет о том, что async\await - конечный автомат, который не блокирует поток, как это делается в Wait'ax для тасков или Thread'ax.И ещё раз, где в примере с ContinueWhenAll блокируется поток?! Зануда...
...
Рейтинг: 0 / 0
Выборка из базы данных в несколько потоков
    #38083776
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
beg-in-erSeVa это Net 4.0 http://msdn.microsoft.com/ru-ru/magazine/hh456403.aspx ващето это из 13646380 SeVa Ничего особо сложного
Не обращай внимание на эту придурь :)
...
Рейтинг: 0 / 0
Выборка из базы данных в несколько потоков
    #38083781
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как-то читал про реализацию async/await. Там кодогенерировались Task.ContinueWith. Видимо, с тех пор что-то поменялось...
...
Рейтинг: 0 / 0
Выборка из базы данных в несколько потоков
    #38083786
beg-in-er
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot SeVa]
Код: sql
1.
2.
3.
4.
Main before 8
Foo before 8
Foo after 10
Main after 8


а почему FooAfter==10 ??? может быть всё таки разные потоки?
...
Рейтинг: 0 / 0
Выборка из базы данных в несколько потоков
    #38083791
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVaResults
Код: c#
1.
2.
3.
4.
Main before 8
Foo before 8
Foo after 10
Main after 8



Те первый wait в Main блокирующий и выполнение идет в одном потоке, а c await Этого не происходит

Дуралей, это и говорит о том, что асинхронный await выполнился в другом потоке
...
Рейтинг: 0 / 0
Выборка из базы данных в несколько потоков
    #38083798
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
beg-in-erа почему FooAfter==10 ??? может быть всё таки разные потоки?МСУэто и говорит о том, что асинхронный await выполнился в другом потоке Неожиданно.

А если бы это было WinForms/WPF приложение, поток был бы тот же. Но не повезло.
...
Рейтинг: 0 / 0
25 сообщений из 129, страница 4 из 6
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Выборка из базы данных в несколько потоков
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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