Потоки и их таблицы

dihard

Client
Регистрация
08.11.2019
Сообщения
317
Благодарностей
51
Баллы
28
Добрый день, подскажите как для каждого потока записывать свою таблицу. Столкнулся с проблемой когда пишу все потоки в один файл через lock , через каждые 15000-20000 записей потоки останавливаются.
Хочу попробывать разбить на таблицы, а потом соединить их.
 

heks

Client
Регистрация
01.10.2013
Сообщения
1 289
Благодарностей
352
Баллы
83
базы используй
 

dihard

Client
Регистрация
08.11.2019
Сообщения
317
Благодарностей
51
Баллы
28
С базами столкнулся с другой проблемой, при асинхронных запросах , туда доходит лишь половину. Вторая половина не успевает наверно обработаться и идет следующий запрос. Как-то так)
 

Sherminator

Client
Регистрация
10.09.2021
Сообщения
1 418
Благодарностей
790
Баллы
113
С базами столкнулся с другой проблемой, при асинхронных запросах , туда доходит лишь половину. Вторая половина не успевает наверно обработаться и идет следующий запрос. Как-то так)
как асинхронность выполнена? желательно с примером кода
 

dihard

Client
Регистрация
08.11.2019
Сообщения
317
Благодарностей
51
Баллы
28
C#:
 for (int i = 1; i < count_ item; i++) {
        //блок получения из json ряд переменных
       
        // Асинхронные запросы
        var taskPage = Task.Run(() => ZennoPoster.HttpGet(website, "", "utf-8", InterfacesLibrary.Enums.Http.ResponceType.BodyOnly, 5000, "", "", true, 3));
     
        // Обработка результата первого запроса
        taskPage.ContinueWith(mainPageTask => {
            string mainPageHtml = mainPageTask.Result;
           
            //блок обработки GET запроса
           
            // Асинхронный запрос 2
            var taskPage2 = PageUrl != null
                ? Task.Run(() => ZennoPoster.HttpGet(website2, "", "utf-8", InterfacesLibrary.Enums.Http.ResponceType.BodyOnly, 5000, "", "", true, 3))
                : Task.FromResult(string.Empty);
         
            // Обработка результата второго запроса
            taskPage2.ContinueWith(secondPageTask => {
               
                string Page2 = secondPageTask.Result;
               
                //блок обработки 2 GET запроса

                // Асинхронная обработка данных полученных из двух GET запросов
                var task1 = Task.Run(() => {
                   // блок обработки regex двух get запросов
                });

                // Асинхронная обработка данных полученных из двух GET запросов
                var task2 = Task.Run(() => {
                    // блок обработки regex двух get запросов
                });

                // Ожидание завершения задач
                Task.WhenAll(task1, task2).ContinueWith(t => {
                   
               
                // Добавляем результат в таблицу
              if (!string.IsNullOrEmpty(Name)) { // Name переменная название товара
                    lock(tb1) {
                        tb1.AddRow(new[] {
                            //блок добавления переменных
                        });
                        }
                    }
                });
            });
        });
    };
 
Последнее редактирование:

dihard

Client
Регистрация
08.11.2019
Сообщения
317
Благодарностей
51
Баллы
28

Sherminator

Client
Регистрация
10.09.2021
Сообщения
1 418
Благодарностей
790
Баллы
113
Буду рад вашему комменарию
Task.WhenAll(task1, task2).ContinueWith(t => {

В этом куске если произойдет ошибка при выполнении таск1 или таск2 то даже эксепшена вроде как не вылетит, надо проверку делать, вообще конечно лучше на async await это переделывать


C#:
Task.WhenAll(task1, task2).ContinueWith(t => {
                if (t.IsFaulted)
                {
                    foreach (var ex in t.Exception.InnerExceptions)
                    {
                        project.SendErrorToLog("Ошибка: " + ex.Message,true);
                    }
                }
                else
                {

                    //тут твой код
                }
});
 
  • Спасибо
Реакции: dihard

dihard

Client
Регистрация
08.11.2019
Сообщения
317
Благодарностей
51
Баллы
28
Task.WhenAll(task1, task2).ContinueWith(t => {

В этом куске если произойдет ошибка при выполнении таск1 или таск2 то даже эксепшена вроде как не вылетит, надо проверку делать, вообще конечно лучше на async await это переделывать


C#:
Task.WhenAll(task1, task2).ContinueWith(t => {
                if (t.IsFaulted)
                {
                    foreach (var ex in t.Exception.InnerExceptions)
                    {
                        project.SendErrorToLog("Ошибка: " + ex.Message,true);
                    }
                }
                else
                {

                    //тут твой код
                }
});
Спасибо, будем тестировать
 

Кто просматривает тему: (Всего: 3, Пользователи: 0, Гости: 3)