powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как реализовать такую идею ? Есть ли готовые решения ?
25 сообщений из 44, страница 1 из 2
Как реализовать такую идею ? Есть ли готовые решения ?
    #39793541
WaspNewCore
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Задача такая:
В некий класс/сервис должны поступать задачи. В рамках задачи нужно работать с базой в рамках транзакции + вызовы к сторонним системам через HttpClient, в случае успеха выполнения которых нужно успешно закрывать транзакцию. При этом стоит требование об ограничении количества параллельно выполняющихся таких задач (тасков).

Соответственно по задумке, при поступлении задачи должен стартовать новый Task и что-то там делать. Общее количество работающих задач я планирую ограничить через семафор. Но сложность в том, чтобы реализовать следующее:
Нужно проконтролировать, что задачи при успешном И не успешном выполнении отчистят все ресурсы за собой: закроют соединение, освободят семафор, уберут ссылку на себя - чтобы не утекала память. На все время выполнения задачи ссылку на нее нужно где-то сохранять, чтобы сборщик мусора не убил, но затем эту ссылку нужно почистить.

Как такое можно реализовать ? Есть ли готовые решения ?
...
Рейтинг: 0 / 0
Как реализовать такую идею ? Есть ли готовые решения ?
    #39793542
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Используйте TaskScheduler
...
Рейтинг: 0 / 0
Как реализовать такую идею ? Есть ли готовые решения ?
    #39793543
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
точнее реализуйте свой. который будет запускать таск, с ограничением на количество, очередью выполнения и прочим, прочим, прочим
...
Рейтинг: 0 / 0
Как реализовать такую идею ? Есть ли готовые решения ?
    #39793544
WaspNewCore
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Roman Mejtesточнее реализуйте свой. который будет запускать таск, с ограничением на количество, очередью выполнения и прочим, прочим, прочим

Про TaskScheduler не знал, спасибо, буду копать. А вот необходимость реализовывать "ограничением на количество, очередью выполнения и прочим, прочим, прочим" как раз смущает ) Этого я и хотел избежать.
...
Рейтинг: 0 / 0
Как реализовать такую идею ? Есть ли готовые решения ?
    #39793595
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WaspNewCoreЭтого я и хотел избежать
тогда программиста нанимать нужно
...
Рейтинг: 0 / 0
Как реализовать такую идею ? Есть ли готовые решения ?
    #39793604
WaspNewCore
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Изопропил,

Ищем, приходите на собеседование )
...
Рейтинг: 0 / 0
Как реализовать такую идею ? Есть ли готовые решения ?
    #39793606
WaspNewCore
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Насчет TaskScheduler я переборщил. Из головы вылетело про него. Обычно напрямую таски создаем через Task.Run.
...
Рейтинг: 0 / 0
Как реализовать такую идею ? Есть ли готовые решения ?
    #39793632
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WaspNewCoreбазой в рамках транзакции + вызовы к сторонним системам через HttpClient,читать про РАСПРЕДЕЛЕННЫЕ транзакции.
Дорогая штука.
...
Рейтинг: 0 / 0
Как реализовать такую идею ? Есть ли готовые решения ?
    #39793639
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WaspNewCore,
Код: c#
1.
System.Transactions
...
Рейтинг: 0 / 0
Как реализовать такую идею ? Есть ли готовые решения ?
    #39793641
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WaspNewCoreЭтого я и хотел избежать.дык у вас в ТЗ слова Ограничения/ограничить.)))
...
Рейтинг: 0 / 0
Как реализовать такую идею ? Есть ли готовые решения ?
    #39793657
vb_sub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WaspNewCore,

в сторону pipeline- pattern смотрел?
...
Рейтинг: 0 / 0
Как реализовать такую идею ? Есть ли готовые решения ?
    #39793663
WaspNewCore
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123WaspNewCoreбазой в рамках транзакции + вызовы к сторонним системам через HttpClient,читать про РАСПРЕДЕЛЕННЫЕ транзакции.
Дорогая штука.

Распределенные задачи не нужны !
Требуется чтобы созданный таск в рамках транзакции обрабатывал данные из бд. Запрашивал дополнительную информацию у стороннего сервиса, и успешно закрывал транзакцию после обработки. Либо падал с откатом транзакции, чтобы кто-то другой подхватил задачу и попробовал ее сделать.

Основная сложность, при поступлении задач, генерить таски не больше заданного одновременного количества (думаю через семафор), а также следить за тем, чтобы таски завершаясь освобождали ресурсы - тот же семафор. Соотвественно где-то хранить список текущих тасков, защищая их от сборщика мусора, и удалять завершенные.
...
Рейтинг: 0 / 0
Как реализовать такую идею ? Есть ли готовые решения ?
    #39793667
WaspNewCore
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vb_subWaspNewCore,

в сторону pipeline- pattern смотрел?

В первый раз слышу про него, это явно не классический от GOF. Почитаю, может придумаю как задействовать. Надеюсь это не просто producer-consumer..... Ой. Кстати. Может BlockingCollection поможет решить мою задачу, нужно подумать..
...
Рейтинг: 0 / 0
Как реализовать такую идею ? Есть ли готовые решения ?
    #39793686
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WaspNewCoreРаспределенные задачи не нужны !
Требуется чтобы созданный таск в рамках транзакции обрабатывал данные из бд. Запрашивал дополнительную информацию у стороннего сервиса, и успешно закрывал транзакциюможет в школу сходить?
Распределенные не задачи, я говорил, а транзакции.
Приводи пример уже что ли.
...
Рейтинг: 0 / 0
Как реализовать такую идею ? Есть ли готовые решения ?
    #39793689
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WaspNewCore,
Если без распределенных, то обычная очередь для того чтобы другой подхватил.
Транзакция будет одна в одном блоке try.
...
Рейтинг: 0 / 0
Как реализовать такую идею ? Есть ли готовые решения ?
    #39793694
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WaspNewCoreТребуется чтобы созданный таск в рамках транзакции обрабатывал данные из бд.все бд работают в рамках транзакции.
Комментируй.
Либо это лишние слова и ты просто читаешь из бд, и потом пишешь несколько операций одной транзакцией. Например 10 раз insert с откатом.
...
Рейтинг: 0 / 0
Как реализовать такую идею ? Есть ли готовые решения ?
    #39793697
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WaspNewCoreОбщее количество работающих задач я планирую ограничить через семафор.вместо пула потоков с maxPoolingThread?
...
Рейтинг: 0 / 0
Как реализовать такую идею ? Есть ли готовые решения ?
    #39793706
WaspNewCore
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123,

Есть тонкость, которую я забыл упомянуть. Одновременно будет работать несколько таких сервисов, по обработке задач. Работать будут в одном приложении - в разных потоках. Поэтому ограничить через общий пул потоков не выйдет. Нужны индивидуальные настройки.
...
Рейтинг: 0 / 0
Как реализовать такую идею ? Есть ли готовые решения ?
    #39793709
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WaspNewCoreЕсть ли готовые решения ?
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
private Task MyAsync()
{
	return Task.Run(() =>
		{
			// код в потоке
                        ReadDB
                        ReadSiteWEB
                        InsertDB
			...
		}
		);
}

ButtonsClick()
{
	await MyAsync();
}


Что по ТЗ упустил?
...
Рейтинг: 0 / 0
Как реализовать такую идею ? Есть ли готовые решения ?
    #39793712
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WaspNewCoreнесколько таких сервисовпереведи. Зачем?
У тебя и от одного сервиса весь проц будет занят.
...
Рейтинг: 0 / 0
Как реализовать такую идею ? Есть ли готовые решения ?
    #39793714
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WaspNewCoreобщий пул потоковон общий вроде на процесс
...
Рейтинг: 0 / 0
Как реализовать такую идею ? Есть ли готовые решения ?
    #39793718
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WaspNewCore,
Задача равно поток. И не усложняй жизнь семафорами.
...
Рейтинг: 0 / 0
Как реализовать такую идею ? Есть ли готовые решения ?
    #39793720
vb_sub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WaspNewCore, зачем ограничивать общее количество работающих задач?
...
Рейтинг: 0 / 0
Как реализовать такую идею ? Есть ли готовые решения ?
    #39793727
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vb_subWaspNewCore, зачем ограничивать общее количество работающих задач?+1
...
Рейтинг: 0 / 0
Как реализовать такую идею ? Есть ли готовые решения ?
    #39793768
WaspNewCore
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123,

Упущено ограничение на одновременную работу не более заданного числа.

Т.е. должно быть примерно так:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Service
   RunWork ()
  {
        var semaphore = new SemaphoreSlim (maxCount)
        while (...)
        {
          var item = GetNextWorkItem ();
          Task currentWork = Task.Run (item...)
          
          и вот дальше  нужно сохранить ссылку на задачу,чтобы сборщик мусора не убрал. а когда таск завершится, 
          чтобы он сделал semaphore.Release() и удалит ссылку на себя, позволив сборщику мусора убрать за собой

          и при этом учесть вероятность, что таск может упасть, и должен тоже успеть вызвать semaphore.Release()
        }
  }
...
Рейтинг: 0 / 0
25 сообщений из 44, страница 1 из 2
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как реализовать такую идею ? Есть ли готовые решения ?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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