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

Откуда: г. Пермь
Сообщений: 3463
а что мешает создавать SomeRecord внутри таска, а не снаружи? :)
11 дек 18, 11:23    [21759992]     Ответить | Цитировать Сообщить модератору
 Re: Прошу научить запускать таски на VB.NET  [new]
Владимир Саныч
Member

Откуда: Израиль (причем это 1 человек, а не 2 => прошу на ты)
Сообщений: 40416
Пробовал вот так, но не идет - не знаю почему и лень разбираться. Выдает всякие ошибки на апдейте таблицы.
        Dim i As Integer
        Dim oo As New Collection
        For i = 0 To 4
            oo.Add(New SomeRecords("nCou % 5 = " & CStr(i)))
        Next
        Dim o As SomeRecords
        For Each o In oo
            tt.Add(Task.Factory.StartNew(Sub()
                                             o.RunAll()
                                         End Sub))
        Next
11 дек 18, 11:29    [21759998]     Ответить | Цитировать Сообщить модератору
 Re: Прошу научить запускать таски на VB.NET  [new]
Владимир Саныч
Member

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

Мешает то, что параметр цикла неправильно передается внутрь таска.
11 дек 18, 11:30    [21760001]     Ответить | Цитировать Сообщить модератору
 Re: Прошу научить запускать таски на VB.NET  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38643
Владимир Саныч
Сейчас это выглядит так:
        Dim o As SomeRecords
        o = New SomeRecords("nCou % 5 = 0")
        tt.Add(Task.Factory.StartNew(Sub()
                                         o.RunAll()
                                     End Sub))
        o = New SomeRecords("nCou % 5 = 1")
        tt.Add(Task.Factory.StartNew(Sub()
                                         o.RunAll()
                                     End Sub))
        o = New SomeRecords("nCou % 5 = 2")
        tt.Add(Task.Factory.StartNew(Sub()
                                         o.RunAll()
                                     End Sub))
        o = New SomeRecords("nCou % 5 = 3")
        tt.Add(Task.Factory.StartNew(Sub()
                                         o.RunAll()
                                     End Sub))
        o = New SomeRecords("nCou % 5 = 4")
        tt.Add(Task.Factory.StartNew(Sub()
                                         o.RunAll()
                                     End Sub))

Вполне нормально. Тут не шарп и нет коллекций.
Если циклом, то нелогично так как зависимость нелинейная.
Забей.
Удачи!
11 дек 18, 11:38    [21760017]     Ответить | Цитировать Сообщить модератору
 Re: Прошу научить запускать таски на VB.NET  [new]
Владимир Саныч
Member

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

Где?
11 дек 18, 11:52    [21760038]     Ответить | Цитировать Сообщить модератору
 Re: Прошу научить запускать таски на VB.NET  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38643
Владимир Саныч
Petro123
зависимость нелинейная.

Где?

В скорости выполнения. Сам давал тесты. Она нелинейная при увеличении потоков.
11 дек 18, 11:54    [21760043]     Ответить | Цитировать Сообщить модератору
 Re: Прошу научить запускать таски на VB.NET  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38643
Владимир Саныч,
Если записей станет больше, то не цикл будет, а логику надо будет менять
11 дек 18, 11:55    [21760046]     Ответить | Цитировать Сообщить модератору
 Re: Прошу научить запускать таски на VB.NET  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38643
Владимир Саныч,
Ну и весь код уложился в экран. Тоже хорошо)
11 дек 18, 11:56    [21760050]     Ответить | Цитировать Сообщить модератору
 Re: Прошу научить запускать таски на VB.NET  [new]
Владимир Саныч
Member

Откуда: Израиль (причем это 1 человек, а не 2 => прошу на ты)
Сообщений: 40416
Ну ОК. Спасибо.
11 дек 18, 11:57    [21760053]     Ответить | Цитировать Сообщить модератору
 Re: Прошу научить запускать таски на VB.NET  [new]
ViPRos
Member

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

попробуй так

For Each o In oo
var b = o;
tt.Add(Task.Factory.StartNew(Sub()
b.RunAll()
End Sub))
Next
11 дек 18, 14:29    [21760345]     Ответить | Цитировать Сообщить модератору
 Re: Прошу научить запускать таски на VB.NET  [new]
Владимир Саныч
Member

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

попробуй так

For Each o In oo
var b = o;
tt.Add(Task.Factory.StartNew(Sub()
b.RunAll()
End Sub))
Next

Ошибок не выдает, но бегут де-факто только 2 из 5 тасков.
11 дек 18, 15:26    [21760454]     Ответить | Цитировать Сообщить модератору
 Re: Прошу научить запускать таски на VB.NET  [new]
ViPRos
Member

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

как это? на троих что ли соображают остальные?
11 дек 18, 15:36    [21760472]     Ответить | Цитировать Сообщить модератору
 Re: Прошу научить запускать таски на VB.NET  [new]
ViPRos
Member

Откуда:
Сообщений: 9579
Я не знаю что ты там делаешь, но суть в том, что каждому потоку надо гарантированно подсовывать уникальный объект.
Когда ты крутишься в цикле замыкание сует потокам объект сформированный на тот момент (и возможно несколько потоков будут работать с одним и тем же объектом).
11 дек 18, 15:40    [21760479]     Ответить | Цитировать Сообщить модератору
 Re: Прошу научить запускать таски на VB.NET  [new]
Владимир Саныч
Member

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

как это? на троих что ли соображают остальные?

Я вижу, какие из записей в таблице обрабатываются. Возможно, бегут все, но обрабатываются только 2 из 5 групп записей.
11 дек 18, 17:23    [21760618]     Ответить | Цитировать Сообщить модератору
 Re: Прошу научить запускать таски на VB.NET  [new]
ViPRos
Member

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

надо что бы "b" было уникальным. типа
DataRow b = o.Copy();
11 дек 18, 17:33    [21760625]     Ответить | Цитировать Сообщить модератору
 Re: Прошу научить запускать таски на VB.NET  [new]
Изопропил
Member

Откуда:
Сообщений: 31214
зачем такие сложности...

 public void run(DataTable dt, int maxThreads)
{
       Parallel.For(0, dt.Rows.Count, new ParallelOptions { MaxDegreeOfParallelism = maxThreads },
                (irow) => { Console.WriteLine("{0} {1}", irow, dt.Rows[irow].ItemArray[0]);});
}
12 дек 18, 00:35    [21760939]     Ответить | Цитировать Сообщить модератору
 Re: Прошу научить запускать таски на VB.NET  [new]
Relic Hunter
Member

Откуда: AB
Сообщений: 7071
На Винде не уметь запускать таски??? Вот на ДОС-е их было забавно запускать=)
12 дек 18, 01:18    [21760955]     Ответить | Цитировать Сообщить модератору
 Re: Прошу научить запускать таски на VB.NET  [new]
Владимир Саныч
Member

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

Не проходит компиляцию.

Изопропил
зачем такие сложности...

 public void run(DataTable dt, int maxThreads)
{
       Parallel.For(0, dt.Rows.Count, new ParallelOptions { MaxDegreeOfParallelism = maxThreads },
                (irow) => { Console.WriteLine("{0} {1}", irow, dt.Rows[irow].ItemArray[0]);});
}

У меня программа на VB.
12 дек 18, 13:35    [21761471]     Ответить | Цитировать Сообщить модератору
 Re: Прошу научить запускать таски на VB.NET  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38643
Владимир Саныч,
Счас скажет: "и зачем такие сложности?")))
"Оговорка по Фрейду...))
12 дек 18, 14:21    [21761566]     Ответить | Цитировать Сообщить модератору
 Re: Прошу научить запускать таски на VB.NET  [new]
Изопропил
Member

Откуда:
Сообщений: 31214
Владимир Саныч
У меня программа на VB.

http://converter.telerik.com/

ну не популярен vb.net в наших краях

Public Sub run(ByVal dt As DataTable, ByVal maxThreads As Integer)
    Parallel.[For](0, dt.Rows.Count, New ParallelOptions With {
        .MaxDegreeOfParallelism = maxThreads
    }, Function(irow)
           Console.WriteLine("{0} {1}", irow, dt.Rows(irow).ItemArray(0))
       End Function)
End Sub
12 дек 18, 14:39    [21761613]     Ответить | Цитировать Сообщить модератору
 Re: Прошу научить запускать таски на VB.NET  [new]
Владимир Саныч
Member

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

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

тебе же написали maxThreads
ставь maxThreads = 4 и будет у тебя 4 потока (если повезет)
13 дек 18, 13:15    [21762860]     Ответить | Цитировать Сообщить модератору
 Re: Прошу научить запускать таски на VB.NET  [new]
Владимир Саныч
Member

Откуда: Израиль (причем это 1 человек, а не 2 => прошу на ты)
Сообщений: 40416
Я отказался от идеи запускать записи по одной в поток.
13 дек 18, 17:19    [21763264]     Ответить | Цитировать Сообщить модератору
 Re: Прошу научить запускать таски на VB.NET  [new]
Изопропил
Member

Откуда:
Сообщений: 31214
Владимир Саныч
Я отказался от идеи запускать записи по одной в поток.

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

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

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

А что это и зачем?
13 дек 18, 17:59    [21763324]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 2 [3] 4   вперед  Ctrl      все
Все форумы / WinForms, .Net Framework Ответить