powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Прошу научить запускать таски на VB.NET
25 сообщений из 91, страница 1 из 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
25 сообщений из 91, страница 1 из 4
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Прошу научить запускать таски на VB.NET
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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