Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / WinForms, .Net Framework Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 2 3 [4]      все
 Re: Прошу научить запускать таски на VB.NET  [new]
Владимир Саныч
Member

Откуда: Израиль (причем это 1 человек, а не 2 => прошу на ты)
Сообщений: 40416
Вспомнил, что остался еще один неотвеченный вопрос:
Владимир Саныч
И еще вопрос. Локальные переменные, описанные в этой вызываемой асинхронно процедуре, у каждого вызова свои? Мне кажется, что одни и те же и разные вызовы затирают их друг другу.
13 дек 18, 18:31    [21763368]     Ответить | Цитировать Сообщить модератору
 Re: Прошу научить запускать таски на VB.NET  [new]
ViPRos
Member

Откуда:
Сообщений: 9560
Владимир Саныч,

свои
13 дек 18, 18:40    [21763383]     Ответить | Цитировать Сообщить модератору
 Re: Прошу научить запускать таски на VB.NET  [new]
Изопропил
Member

Откуда:
Сообщений: 31186
Владимир Саныч
Посыпаю голову пеплом. Последний вариант работает. Благодарю всех!

Изопропил
Partitioner прикрути

А что это и зачем?
чтоб группу записей в потоке обрабатывать

Public Sub run(ByVal dt As DataTable, ByVal maxThreads As Integer)
    Parallel.ForEach(Partitioner.Create(0, dt.Rows.Count, dt.Rows.Count / maxThreads), New ParallelOptions() With {
        .MaxDegreeOfParallelism = maxThreads
    }, Function(range, loopState)

           For i As Integer = range.Item1 To range.Item2 - 1
               DoIt(dt.Rows(i))
           Next
       End Function)
End Sub


или

Public Sub run(ByVal dt As DataTable, ByVal maxThreads As Integer)
    Parallel.ForEach(Partitioner.Create(Of DataRow)(dt.Rows.Cast(Of DataRow)()), New ParallelOptions() With {
        .MaxDegreeOfParallelism = maxThreads
    }, Function(row, loopState)
           DoIt(row)
       End Function)
End Sub
13 дек 18, 18:48    [21763391]     Ответить | Цитировать Сообщить модератору
 Re: Прошу научить запускать таски на VB.NET  [new]
Владимир Саныч
Member

Откуда: Израиль (причем это 1 человек, а не 2 => прошу на ты)
Сообщений: 40416
ViPRos
свои

Thanx.

Изопропил
чтоб группу записей в потоке обрабатывать

Не понимаю, что делает этот код. Какая именно группа записей попадает в один поток?
13 дек 18, 22:31    [21763505]     Ответить | Цитировать Сообщить модератору
 Re: Прошу научить запускать таски на VB.NET  [new]
Изопропил
Member

Откуда:
Сообщений: 31186
Владимир Саныч,

в первом случае записи из диапазона 0 .. dt.Rows.Count -1
разбитом на поддиапазоны по dt.Rows.Count/maxThreads записей

втором - извлекаемые из таблицы по мере обработки (вызовов DoIt), динамическая группа
14 дек 18, 00:50    [21763556]     Ответить | Цитировать Сообщить модератору
 Re: Прошу научить запускать таски на VB.NET  [new]
Владимир Саныч
Member

Откуда: Израиль (причем это 1 человек, а не 2 => прошу на ты)
Сообщений: 40416
Изопропил
извлекаемые из таблицы по мере обработки (вызовов DoIt), динамическая группа

А! Да, так лучше, конечно. Спасибо.
16 дек 18, 12:23    [21765216]     Ответить | Цитировать Сообщить модератору
 Re: Прошу научить запускать таски на VB.NET  [new]
Владимир Саныч
Member

Откуда: Израиль (причем это 1 человек, а не 2 => прошу на ты)
Сообщений: 40416
Только оно не едет. Скопировал к себе второй из двух вариантов, получил:

Overload resolution failed because no accessible 'ForEach' can be called with these arguments

Думаю, что не нужно продолжать, работающая версия у меня уже есть.
16 дек 18, 12:39    [21765229]     Ответить | Цитировать Сообщить модератору
 Re: Прошу научить запускать таски на VB.NET  [new]
Изопропил
Member

Откуда:
Сообщений: 31186
Владимир Саныч,

 Public Sub run1(ByVal dt As DataTable, ByVal maxThreads As Integer)
            Dim pp As OrderablePartitioner(Of Tuple(Of Long, Long))
            pp = Partitioner.Create(0, dt.Rows.Count, CLng(dt.Rows.Count / maxThreads))
            Parallel.ForEach(pp, New ParallelOptions() With {
                .MaxDegreeOfParallelism = maxThreads
                    }, Sub(range, loopState)
                           For i As Integer = range.Item1 To range.Item2 - 1
                               DoIt(dt.Rows(i))
                           Next
                       End Sub)
        End Sub
16 дек 18, 18:24    [21765443]     Ответить | Цитировать Сообщить модератору
 Re: Прошу научить запускать таски на VB.NET  [new]
Владимир Саныч
Member

Откуда: Израиль (причем это 1 человек, а не 2 => прошу на ты)
Сообщений: 40416
Увы, всё по-прежнему:
Владимир Саныч
Overload resolution failed because no accessible 'ForEach' can be called with these arguments

Думаю, что не нужно продолжать, работающая версия у меня уже есть.
18 дек 18, 10:58    [21766711]     Ответить | Цитировать Сообщить модератору
 Re: Прошу научить запускать таски на VB.NET  [new]
Изопропил
Member

Откуда:
Сообщений: 31186
Владимир Саныч,

дело принципа уже ))

К сообщению приложен файл (ConsoleApp2.zip - 12Kb) cкачать
18 дек 18, 12:54    [21766939]     Ответить | Цитировать Сообщить модератору
 Re: Прошу научить запускать таски на VB.NET  [new]
Владимир Саныч
Member

Откуда: Израиль (причем это 1 человек, а не 2 => прошу на ты)
Сообщений: 40416
Интересно. Если я открываю прямо этот проект, то ошибок нет. Даже при том, что я при открывании поменял .Net с 4.6.1 на мой 4.5.2. Если же я копирую код в мой проект, то опять получаю ту же ошибку (два раза: на run и на run1).

Если я в обоих проектах ставлю мышку на Parallel и жму Go To Definition, получаю одну и ту же страничку с такой начальной частью:
#Region "Assembly mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
' C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5.2\mscorlib.dll
#End Region
19 дек 18, 11:32    [21768118]     Ответить | Цитировать Сообщить модератору
 Re: Прошу научить запускать таски на VB.NET  [new]
Владимир Саныч
Member

Откуда: Израиль (причем это 1 человек, а не 2 => прошу на ты)
Сообщений: 40416
И что интересно - я в своем проекте был вынужден добавить строчку
Imports System.Collections.Concurrent
а в твоем проекте всё работает и без нее.
19 дек 18, 11:35    [21768120]     Ответить | Цитировать Сообщить модератору
 Re: Прошу научить запускать таски на VB.NET  [new]
Cat2
Member

Откуда: Petroskoi, Karjala
Сообщений: 145636
Владимир Саныч
И что интересно

Микрософт - загадочная страна
19 дек 18, 22:21    [21768947]     Ответить | Цитировать Сообщить модератору
 Re: Прошу научить запускать таски на VB.NET  [new]
Cat2
Member

Откуда: Petroskoi, Karjala
Сообщений: 145636
Владимир Саныч,
Ты хотя бы попробовал то, как я в начале предложил? Иди так и продолжаешь возится с await-asinc?
Это же практически "сахар" синтаксический над Тасками
19 дек 18, 22:28    [21768956]     Ответить | Цитировать Сообщить модератору
 Re: Прошу научить запускать таски на VB.NET  [new]
Cat2
Member

Откуда: Petroskoi, Karjala
Сообщений: 145636
Я и ВС давно знакомы. Он и я имеют привилегию друг-друга на Ты называть.
19 дек 18, 22:30    [21768959]     Ответить | Цитировать Сообщить модератору
 Re: Прошу научить запускать таски на VB.NET  [new]
Владимир Саныч
Member

Откуда: Израиль (причем это 1 человек, а не 2 => прошу на ты)
Сообщений: 40416
Cat2
Владимир Саныч,
Ты хотя бы попробовал то, как я в начале предложил?

Давно! Вот моя реакция:
21759466
Но эту проблему потом решили.
20 дек 18, 11:42    [21769290]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 2 3 [4]      все
Все форумы / WinForms, .Net Framework Ответить