powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Прошу научить запускать таски на VB.NET
91 сообщений из 91, показаны все 4 страниц
Прошу научить запускать таски на VB.NET
    #39744956
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Приветствую присутствующих. Я как бы не совсем чайник, но чувствую себя полным нулем в тасках.

Есть процедура, которая берет DataRow как параметр и должна запускаться асинхронно:
Код: vbnet
1.
2.
3.
Private Async Sub OneRecord(dr As DataRow)
...
End Sub


Есть цикл, который ее должен вызвать:
Код: vbnet
1.
2.
3.
4.
For Each dr As DataRow In dsRecords.Tables(0).Rows
    Dim t As Task = New Task(New Action(AddressOf OneRecord))
    t.Start()
Next


Вопрос 1. Как сюда вставить передачу параметра dr?
Вопрос 2. У меня еще светится сообщение, что в процедуре OneRecord отсутствуют операторы Await и поэтому она не будет запускаться асинхронно. Куда вставлять Await?

Пытался читать старые обсуждения, но ничего там не понял. Заранее спасибо.
...
Рейтинг: 0 / 0
Прошу научить запускать таски на VB.NET
    #39744972
WebPrj
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Владимир Саныч,
Весь цикл в асинхронную процедуру. Передать туда строку коннекта.
...
Рейтинг: 0 / 0
Прошу научить запускать таски на VB.NET
    #39744976
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Без Await и прочих Async можно так


Код: 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.
using System.Collections.Generic;
using System.Data;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            DataSet ds = new DataSet();
            DataTable dt = new DataTable("first");
            ds.Tables.Add(dt);

            //Вот так можно просто запустить много потоков без ожидания их выполнения
            foreach (DataRow dr in ds.Tables["first"].Rows)
            {
                Task.Factory.StartNew(() =>
                {
                    doit(dr);
                });
            }
            //Вот так можно запустить много потоков и ждать, пока они все выполнятся
            List<Task> tasks = new List<Task>();
            foreach (DataRow dr in dt.Rows)
            {
                tasks.Add(
            Task.Factory.StartNew(() =>
            {
                doit(dr);
            }));
            }
            Task.WaitAll(tasks.ToArray());
        }
        static void doit(DataRow dr)
        {

        }
    }
    
}
...
Рейтинг: 0 / 0
Прошу научить запускать таски на VB.NET
    #39744978
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Ах да. Переводчик

Код: vbnet
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.
Imports System.Collections.Generic
Imports System.Data
Imports System.Threading.Tasks
Namespace ConsoleApplication1
	Class Program
		Shared Sub Main(args As String())
			Dim ds As New DataSet()
			Dim dt As New DataTable("first")
			ds.Tables.Add(dt)
			For Each dr As DataRow In ds.Tables("first").Rows
				Task.Factory.StartNew(Function() 
				doit(dr)

End Function)
			Next
			Dim tasks As New List(Of Task)()
			For Each dr As DataRow In dt.Rows
				tasks.Add(Task.Factory.StartNew(Function() 
				doit(dr)

End Function))
			Next
			Task.WaitAll(tasks.ToArray())
		End Sub
		Shared Sub doit(dr As DataRow)
		End Sub
	End Class
End Namespace
...
Рейтинг: 0 / 0
Прошу научить запускать таски на VB.NET
    #39744979
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WebPrjВесь цикл в асинхронную процедуру. Передать туда строку коннекта.
И цикл будет переходить к следующей записи, не дожидаясь обработки предыдущей???

Cat2 Переводчик
О, это очень ценная штука, спасибо.
...
Рейтинг: 0 / 0
Прошу научить запускать таски на VB.NET
    #39744981
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Владимир СанычИ цикл будет переходить к следующей записи, не дожидаясь обработки предыдущей???
Да. Но надо учитывать, что в какой-то момент множество открытых потоков начинают тормозить
...
Рейтинг: 0 / 0
Прошу научить запускать таски на VB.NET
    #39744982
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Cat2Владимир СанычИ цикл будет переходить к следующей записи, не дожидаясь обработки предыдущей???
Да. Но надо учитывать, что в какой-то момент множество открытых потоков начинают тормозить
Ой, это не к моему коду вопрос был.
...
Рейтинг: 0 / 0
Прошу научить запускать таски на VB.NET
    #39744983
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2Ой, это не к моему коду вопрос был.

Таки да. Но "начинают тормозить" - это глобальная проблема. Я попробую поставить какой-нибудь Sleep, только бы он тоже не начал исполняться асинхронно...
...
Рейтинг: 0 / 0
Прошу научить запускать таски на VB.NET
    #39744985
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И еще вопрос. Локальные переменные, описанные в этой вызываемой асинхронно процедуре, у каждого вызова свои? Мне кажется, что одни и те же и разные вызовы затирают их друг другу.
...
Рейтинг: 0 / 0
Прошу научить запускать таски на VB.NET
    #39744990
WebPrj
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Владимир СанычWebPrjВесь цикл в асинхронную процедуру. Передать туда строку коннекта.
И цикл будет переходить к следующей записи, не дожидаясь обработки предыдущей???

Смотря что надо.
В одном случае будет переключение контекста и создание кучи задач....забитие пула потоков.
С другой стороны будет фоновое последовательное выполнение.
...
Рейтинг: 0 / 0
Прошу научить запускать таски на VB.NET
    #39744992
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Владимир СанычCat2Ой, это не к моему коду вопрос был.

Таки да. Но "начинают тормозить" - это глобальная проблема. Я попробую поставить какой-нибудь Sleep, только бы он тоже не начал исполняться асинхронно...
Есть более изящные решения
...
Рейтинг: 0 / 0
Прошу научить запускать таски на VB.NET
    #39745022
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WebPrjСмотря что надо.
Надо то, что сказано в исходном посте: запускать асинхронно процедуру, обрабатывающую отдельную запись.

WebPrjВ одном случае будет переключение контекста и создание кучи задач....забитие пула потоков.
А в другом?

WebPrjС другой стороны будет фоновое последовательное выполнение.
Это ровно то, что у меня было до того, как я стал пытаться использовать асинхронность.
...
Рейтинг: 0 / 0
Прошу научить запускать таски на VB.NET
    #39745024
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2Есть более изящные решения
Например?
...
Рейтинг: 0 / 0
Прошу научить запускать таски на VB.NET
    #39745034
WebPrj
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Владимир СанычЭто ровно то, что у меня было до того, как я стал пытаться использовать асинхронность.
что то вы лукавите.
Если одна задача с циклом внутри, то это один поток и готовая асинхронность.
А вы говорите - это было ДО использования асинхронности.
Любое решение это компромиссы.
Если нужно запустить 100 микрозадачек на 100 строках то запускайте.
AFAIK пул там на 50 максимуму и остальные 50 встанут в очередь.
Делайте.
...
Рейтинг: 0 / 0
Прошу научить запускать таски на VB.NET
    #39745040
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WebPrjЕсли одна задача с циклом внутри, то это один поток и готовая асинхронность.
Записи обрабатывались последовательно. Надо параллельно.
...
Рейтинг: 0 / 0
Прошу научить запускать таски на VB.NET
    #39745042
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир Саныч,

Чем задачки занимаются - рассчётами или вводом-выводом?
...
Рейтинг: 0 / 0
Прошу научить запускать таски на VB.NET
    #39745043
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилВладимир Саныч,

Чем задачки занимаются - рассчётами или вводом-выводом?
Передачей информации в другую систему. Процедура берет несколько чисел из одной записи, обращается с ними к другой системе, получает обратно несколько других чисел, заносит в ту же запись.
...
Рейтинг: 0 / 0
Прошу научить запускать таски на VB.NET
    #39745044
WebPrj
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Владимир СанычWebPrjЕсли одна задача с циклом внутри, то это один поток и готовая асинхронность.
Записи обрабатывались последовательно. Надо параллельно.
я ответил - делайте.
Только чтение потокобезопасно. Записывать нельзя без синхронизации.
...
Рейтинг: 0 / 0
Прошу научить запускать таски на VB.NET
    #39745045
WebPrj
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Владимир СанычИзопропилВладимир Саныч,

Чем задачки занимаются - рассчётами или вводом-выводом?
Передачей информации в другую систему. Процедура берет несколько чисел из одной записи, обращается с ними к другой системе, получает обратно несколько других чисел, заносит в ту же запись.
Для этого существует вариант - быстро читают коллекцию и передают коллекцию в другую систему.
...
Рейтинг: 0 / 0
Прошу научить запускать таски на VB.NET
    #39745054
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WebPrjя ответил - делайте.
Да-да, я именно потому и обратился сюда, что точно знаю, как делать, а вот делать или нет - не знал. Спасибо большое за этот очень ценный совет. Теперь буду знать: надо делать. Забыл поблагодарить Вас за предыдущую реплику, заставил повторять, извините.

WebPrjДля этого существует вариант - быстро читают коллекцию и передают коллекцию в другую систему.
А совет переписать ту систему вообще бесценен, еще раз спасибо.
...
Рейтинг: 0 / 0
Прошу научить запускать таски на VB.NET
    #39745077
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир Саныч
Код: vbnet
1.
2.
3.
Private Async Sub OneRecord(dr As DataRow)
...
End Sub


Настоятельно рекомендуется использовать async Task вместо async void (Async Sub)
...
Рейтинг: 0 / 0
Прошу научить запускать таски на VB.NET
    #39745083
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Владимир СанычCat2Есть более изящные решения
Например?

https://toster.ru/q/545984

Второй пример
...
Рейтинг: 0 / 0
Прошу научить запускать таски на VB.NET
    #39745085
WebPrj
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Владимир Саныч,
Мы до тасков еще не дошли).
Вы же написали что новичок.
Теперь делаете пример с первой страницы.
Именно без тасков.
Ну а потом будут таски с возвратом.
...
Рейтинг: 0 / 0
Прошу научить запускать таски на VB.NET
    #39745087
WebPrj
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Владимир СанычWebPrjя ответил - делайте.
Да-да, я именно потому и обратился сюда, что точно знаю, как делать, а вот делать или нет - не знал. Спасибо большое за этот очень ценный совет. Теперь буду знать: надо делать. Забыл поблагодарить Вас за предыдущую реплику, заставил повторять, извините.

WebPrjДля этого существует вариант - быстро читают коллекцию и передают коллекцию в другую систему.
А совет переписать ту систему вообще бесценен, еще раз спасибо.
Столько написали всего, а про запись в потоках промолчали.
...
Рейтинг: 0 / 0
Прошу научить запускать таски на VB.NET
    #39745094
WebPrj
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот, добавил в код выше от Cat2. Подходит?
И ничего тормозить не надо.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
 
            //Вот так можно просто запустить много потоков без ожидания их выполнения
            foreach (DataRow dr in ds.Tables["first"].Rows)
            {
                Task.Factory.StartNew(() =>
                {
                   strung s = await ОбработатьЗаписьПолностью(dr);
                   Console. WriteLine(s) 
                });
            }
            
...
Рейтинг: 0 / 0
Прошу научить запускать таски на VB.NET
    #39745213
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всё прочитал, на всё отвечу чуть позже.
...
Рейтинг: 0 / 0
Прошу научить запускать таски на VB.NET
    #39745215
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пока могу вот на это ответить:
WebPrjСтолько написали всего, а про запись в потоках промолчали.
У меня данные в SQL-сервере. И это у меня не первый случай, когда в него пишут разные треды, без всякой синхронизации между собой (например, из-под IIS). Никогда проблем не было, SQL-сервер все конфликты разруливает сам. В чем проблема в данном случае?
...
Рейтинг: 0 / 0
Прошу научить запускать таски на VB.NET
    #39745221
WebPrj
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Владимир Саныч,
Класс над records в виде table не потокобезопасный.
И цикл фореч тоже.
Поэтому советовал перелить данные из базы в коллекцию.
...
Рейтинг: 0 / 0
Прошу научить запускать таски на VB.NET
    #39745354
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
WebPrjВладимир Саныч,
Класс над records в виде table не потокобезопасный.
И цикл фореч тоже.
Поэтому советовал перелить данные из базы в коллекцию.
Насколько я понял у Владимир Саныча в данной задаче нет конфликтов между потоками, так что потокобезопасность его не волнует.
...
Рейтинг: 0 / 0
Прошу научить запускать таски на VB.NET
    #39745368
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2,
Согласен. Всегда так. Если самому следить что второй поток не пойдет, то и синхронизация не нужна как класс.
А вот если строить индекс и так далее, то получим райзе.
Ему решать.
...
Рейтинг: 0 / 0
Прошу научить запускать таски на VB.NET
    #39745520
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123А вот если строить индекс и так далее, то получим райзе.
Слово райзе не понял, и про "строить индекс" тоже не понял. На всякий случай: добавления записей в таблицу у меня нет, есть проход по существующим и апдейт по одной.
...
Рейтинг: 0 / 0
Прошу научить запускать таски на VB.NET
    #39745526
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир СанычСлово райзе
видимо "raise exception"
...
Рейтинг: 0 / 0
Прошу научить запускать таски на VB.NET
    #39745536
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир Саныч,
Ну, просто пробуйте.
У меня было райзе..... Недопустимая операция в нескольких потоках....
Я не знаю, насколько устойчивый код вы пишите.
...
Рейтинг: 0 / 0
Прошу научить запускать таски на VB.NET
    #39745540
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилВладимир СанычСлово райзе
видимо "raise exception"
Спасибо.

Я еще не на всё могу ответить, но пока что понял, что надо менять концепцию. В отдельный поток пойдет не обработка одной записи, а цикл, который идет по некоторой части записей (которая отбирается через where). Тогда я сам могу задавать количество потоков, бегущих параллельно.
...
Рейтинг: 0 / 0
Прошу научить запускать таски на VB.NET
    #39745554
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир Саныч,
+1
Еще лучше будет при отдельном коннекте в поток.
Тогда будет изолированы через разные транзакции.
Но это если не переделка) проекта.
...
Рейтинг: 0 / 0
Прошу научить запускать таски на VB.NET
    #39745562
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Еще лучше будет при отдельном коннекте в поток.
Тогда будет изолированы через разные транзакции.
Но это если не переделка) проекта.
зачем?
...
Рейтинг: 0 / 0
Прошу научить запускать таски на VB.NET
    #39745563
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, коннекты тоже разделил. Сейчас проблема следующая: делаю цикл
For i = 0 To 4
и в нем как ни пишу - не удается сделать, чтобы каждый поток бежал со своим i (по которому фильтруются записи из таблицы для каждого потока). Цикл вроде проходит по i, а потом потоки начинают бежать и берут то значение i, которое оказалось уже после выхода из цикла. Код выглядит примерно так:

Код: vbnet
1.
2.
3.
4.
5.
        For i = 0 To 4
            Task.Factory.StartNew(Sub()
                                  ... i ...
                                  End Sub)
        Next


Пытался делать объекты, коллекции, но от этого только код усложняется, а решение не приходит.
...
Рейтинг: 0 / 0
Прошу научить запускать таски на VB.NET
    #39745571
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир Саныч, https://habr.com/post/141270/
...
Рейтинг: 0 / 0
Прошу научить запускать таски на VB.NET
    #39745583
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Каждой записи поток
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
foreach (DataRow dr in ds.Tables["first"].Rows)
            {
                Task.Factory.StartNew(() =>
                {
                   strung s = await ОбработатьЗаписьПолностью(dr);
                   Console. WriteLine(s) 
                });
            }


Цикл внутрь потока
Код: sql
1.
2.
3.
4.
5.
6.
7.
 Task.Factory.StartNew(() =>
                {
                     foreach (DataRow dr in ds.Tables["first"].Rows)
                          ОбработатьЗаписьПолностью(dr);
                  
                });
            
...
Рейтинг: 0 / 0
Прошу научить запускать таски на VB.NET
    #39745584
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buserВладимир Саныч, https://habr.com/post/141270/
Спасибо, теперь я знаю, что это не баг, а фича.
...
Рейтинг: 0 / 0
Прошу научить запускать таски на VB.NET
    #39745585
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Цикл внутрь потока
Цикл по записям у меня сейчас внутри потока.
...
Рейтинг: 0 / 0
Прошу научить запускать таски на VB.NET
    #39745587
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир СанычPetro123Цикл внутрь потока
Цикл по записям у меня сейчас внутри потока.ну, значит работает?
А как из одного сделать два или три цикла надо профи спросить.
То ли ридером с where date=....
То ли пропускать в цикле самом.
Имхо
...
Рейтинг: 0 / 0
Прошу научить запускать таски на VB.NET
    #39745591
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В общем, пока сделал без цикла, просто тупо размножил код 5 раз. Будет проблема, когда захочу сделать не 5.
...
Рейтинг: 0 / 0
Прошу научить запускать таски на VB.NET
    #39745596
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир СанычВ общем, пока сделал без цикла, просто тупо размножил код 5 раз. Будет проблема, когда захочу сделать не 5.ты замерь для интереса одним потоком и пятью. Есть разница?
Удачи!
...
Рейтинг: 0 / 0
Прошу научить запускать таски на VB.NET
    #39745601
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123ты замерь для интереса одним потоком и пятью. Есть разница?
Как раз сейчас замерял. Пятью быстрее, чем одним, хотя и всего раза в 2-3. А вот десятью уже не быстрее, чем пятью.
...
Рейтинг: 0 / 0
Прошу научить запускать таски на VB.NET
    #39745619
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир СанычPetro123ты замерь для интереса одним потоком и пятью. Есть разница?
Как раз сейчас замерял. Пятью быстрее, чем одним, хотя и всего раза в 2-3. А вот десятью уже не быстрее, чем пятью.так и должно быть.
...
Рейтинг: 0 / 0
Прошу научить запускать таски на VB.NET
    #39745654
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тогда скорее всего так 5 и останется, и тогда не так уж нужен цикл. Но выглядит ужасно некрасиво...
...
Рейтинг: 0 / 0
Прошу научить запускать таски на VB.NET
    #39745658
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир СанычНо выглядит ужасно некрасиво...приведи код напишем красиво.
...
Рейтинг: 0 / 0
Прошу научить запускать таски на VB.NET
    #39745835
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сейчас это выглядит так:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
        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))
...
Рейтинг: 0 / 0
Прошу научить запускать таски на VB.NET
    #39745842
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Забыл строчку:
Код: vbnet
1.
Dim tt As New List(Of Task)
...
Рейтинг: 0 / 0
Прошу научить запускать таски на VB.NET
    #39745845
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а что мешает создавать SomeRecord внутри таска, а не снаружи? :)
...
Рейтинг: 0 / 0
Прошу научить запускать таски на VB.NET
    #39745849
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пробовал вот так, но не идет - не знаю почему и лень разбираться. Выдает всякие ошибки на апдейте таблицы.
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
        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
...
Рейтинг: 0 / 0
Прошу научить запускать таски на VB.NET
    #39745851
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Mejtesа что мешает создавать SomeRecord внутри таска, а не снаружи? :)
Мешает то, что параметр цикла неправильно передается внутрь таска.
...
Рейтинг: 0 / 0
Прошу научить запускать таски на VB.NET
    #39745863
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир СанычСейчас это выглядит так:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
        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))


Вполне нормально. Тут не шарп и нет коллекций.
Если циклом, то нелогично так как зависимость нелинейная.
Забей.
Удачи!
...
Рейтинг: 0 / 0
Прошу научить запускать таски на VB.NET
    #39745873
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123зависимость нелинейная.
Где?
...
Рейтинг: 0 / 0
Прошу научить запускать таски на VB.NET
    #39745878
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир СанычPetro123зависимость нелинейная.
Где?
В скорости выполнения. Сам давал тесты. Она нелинейная при увеличении потоков.
...
Рейтинг: 0 / 0
Прошу научить запускать таски на VB.NET
    #39745880
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир Саныч,
Если записей станет больше, то не цикл будет, а логику надо будет менять
...
Рейтинг: 0 / 0
Прошу научить запускать таски на VB.NET
    #39745883
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир Саныч,
Ну и весь код уложился в экран. Тоже хорошо)
...
Рейтинг: 0 / 0
Прошу научить запускать таски на VB.NET
    #39745885
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну ОК. Спасибо.
...
Рейтинг: 0 / 0
Прошу научить запускать таски на VB.NET
    #39746037
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир Саныч,

попробуй так

For Each o In oo
var b = o;
tt.Add(Task.Factory.StartNew(Sub()
b.RunAll()
End Sub))
Next
...
Рейтинг: 0 / 0
Прошу научить запускать таски на VB.NET
    #39746100
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosВладимир Саныч,

попробуй так

For Each o In oo
var b = o;
tt.Add(Task.Factory.StartNew(Sub()
b.RunAll()
End Sub))
Next
Ошибок не выдает, но бегут де-факто только 2 из 5 тасков.
...
Рейтинг: 0 / 0
Прошу научить запускать таски на VB.NET
    #39746108
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир Саныч,

как это? на троих что ли соображают остальные?
...
Рейтинг: 0 / 0
Прошу научить запускать таски на VB.NET
    #39746111
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я не знаю что ты там делаешь, но суть в том, что каждому потоку надо гарантированно подсовывать уникальный объект.
Когда ты крутишься в цикле замыкание сует потокам объект сформированный на тот момент (и возможно несколько потоков будут работать с одним и тем же объектом).
...
Рейтинг: 0 / 0
Прошу научить запускать таски на VB.NET
    #39746199
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosВладимир Саныч,

как это? на троих что ли соображают остальные?
Я вижу, какие из записей в таблице обрабатываются. Возможно, бегут все, но обрабатываются только 2 из 5 групп записей.
...
Рейтинг: 0 / 0
Прошу научить запускать таски на VB.NET
    #39746203
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир Саныч,

надо что бы "b" было уникальным. типа
DataRow b = o.Copy();
...
Рейтинг: 0 / 0
Прошу научить запускать таски на VB.NET
    #39746350
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
зачем такие сложности...

Код: c#
1.
2.
3.
4.
5.
 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]);});
}
...
Рейтинг: 0 / 0
Прошу научить запускать таски на VB.NET
    #39746363
Фотография Relic Hunter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На Винде не уметь запускать таски??? Вот на ДОС-е их было забавно запускать=)
...
Рейтинг: 0 / 0
Прошу научить запускать таски на VB.NET
    #39746638
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRoso.Copy();
Не проходит компиляцию.

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

Код: c#
1.
2.
3.
4.
5.
 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.
...
Рейтинг: 0 / 0
Прошу научить запускать таски на VB.NET
    #39746680
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир Саныч,
Счас скажет: "и зачем такие сложности?")))
"Оговорка по Фрейду...))
...
Рейтинг: 0 / 0
Прошу научить запускать таски на VB.NET
    #39746703
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир СанычУ меня программа на VB.
http://converter.telerik.com/

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

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
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
...
Рейтинг: 0 / 0
Прошу научить запускать таски на VB.NET
    #39747309
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
О, так этот код пускает в каждый поток по одной записи. Я от этого уже давно отказался.
...
Рейтинг: 0 / 0
Прошу научить запускать таски на VB.NET
    #39747330
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир Саныч,

тебе же написали maxThreads
ставь maxThreads = 4 и будет у тебя 4 потока (если повезет)
...
Рейтинг: 0 / 0
Прошу научить запускать таски на VB.NET
    #39747542
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я отказался от идеи запускать записи по одной в поток.
...
Рейтинг: 0 / 0
Прошу научить запускать таски на VB.NET
    #39747548
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир СанычЯ отказался от идеи запускать записи по одной в поток.
Partitioner прикрути
...
Рейтинг: 0 / 0
Прошу научить запускать таски на VB.NET
    #39747570
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Посыпаю голову пеплом. Последний вариант работает. Благодарю всех!

ИзопропилPartitioner прикрути
А что это и зачем?
...
Рейтинг: 0 / 0
Прошу научить запускать таски на VB.NET
    #39747586
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вспомнил, что остался еще один неотвеченный вопрос:
Владимир СанычИ еще вопрос. Локальные переменные, описанные в этой вызываемой асинхронно процедуре, у каждого вызова свои? Мне кажется, что одни и те же и разные вызовы затирают их друг другу.
...
Рейтинг: 0 / 0
Прошу научить запускать таски на VB.NET
    #39747595
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир Саныч,

свои
...
Рейтинг: 0 / 0
Прошу научить запускать таски на VB.NET
    #39747600
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир СанычПосыпаю голову пеплом. Последний вариант работает. Благодарю всех!

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

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
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



или

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
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
...
Рейтинг: 0 / 0
Прошу научить запускать таски на VB.NET
    #39747657
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosсвои
Thanx.

Изопропилчтоб группу записей в потоке обрабатывать
Не понимаю, что делает этот код. Какая именно группа записей попадает в один поток?
...
Рейтинг: 0 / 0
Прошу научить запускать таски на VB.NET
    #39747675
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир Саныч,

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

втором - извлекаемые из таблицы по мере обработки (вызовов DoIt), динамическая группа
...
Рейтинг: 0 / 0
Прошу научить запускать таски на VB.NET
    #39748577
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропилизвлекаемые из таблицы по мере обработки (вызовов DoIt), динамическая группа
А! Да, так лучше, конечно. Спасибо.
...
Рейтинг: 0 / 0
Прошу научить запускать таски на VB.NET
    #39748580
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Только оно не едет. Скопировал к себе второй из двух вариантов, получил:

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

Думаю, что не нужно продолжать, работающая версия у меня уже есть.
...
Рейтинг: 0 / 0
Прошу научить запускать таски на VB.NET
    #39748657
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир Саныч,

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
 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
...
Рейтинг: 0 / 0
Прошу научить запускать таски на VB.NET
    #39749305
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Увы, всё по-прежнему:
Владимир СанычOverload resolution failed because no accessible 'ForEach' can be called with these arguments

Думаю, что не нужно продолжать, работающая версия у меня уже есть.
...
Рейтинг: 0 / 0
Прошу научить запускать таски на VB.NET
    #39749394
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир Саныч,

дело принципа уже ))
...
Рейтинг: 0 / 0
Прошу научить запускать таски на VB.NET
    #39750043
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Интересно. Если я открываю прямо этот проект, то ошибок нет. Даже при том, что я при открывании поменял .Net с 4.6.1 на мой 4.5.2. Если же я копирую код в мой проект, то опять получаю ту же ошибку (два раза: на run и на run1).

Если я в обоих проектах ставлю мышку на Parallel и жму Go To Definition, получаю одну и ту же страничку с такой начальной частью:
Код: vbnet
1.
2.
3.
#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
...
Рейтинг: 0 / 0
Прошу научить запускать таски на VB.NET
    #39750044
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И что интересно - я в своем проекте был вынужден добавить строчку
Imports System.Collections.Concurrent
а в твоем проекте всё работает и без нее.
...
Рейтинг: 0 / 0
Прошу научить запускать таски на VB.NET
    #39750511
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Владимир СанычИ что интересно
Микрософт - загадочная страна
...
Рейтинг: 0 / 0
Прошу научить запускать таски на VB.NET
    #39750515
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Владимир Саныч,
Ты хотя бы попробовал то, как я в начале предложил? Иди так и продолжаешь возится с await-asinc?
Это же практически "сахар" синтаксический над Тасками
...
Рейтинг: 0 / 0
Прошу научить запускать таски на VB.NET
    #39750517
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Я и ВС давно знакомы. Он и я имеют привилегию друг-друга на Ты называть.
...
Рейтинг: 0 / 0
Прошу научить запускать таски на VB.NET
    #39750674
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2Владимир Саныч,
Ты хотя бы попробовал то, как я в начале предложил?
Давно! Вот моя реакция:
21759466
Но эту проблему потом решили.
...
Рейтинг: 0 / 0
91 сообщений из 91, показаны все 4 страниц
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Прошу научить запускать таски на VB.NET
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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