Запуск нескольких задач только в одном потоке

235
25 февраля 2018, 22:59

В момент времени запускаются 300 тасков ( этот запуск происходит периодически в пару минут). Метод, который выполняется внутри таска, производит несколько асинхронных запросов к внешнему источнику. Учитывая, что тасков много, а ответ от внешнего источника может быть на протяжении нескольких минут, то из-за этого создаются лишние потоки. Лишние в том плане, что одновременно рабочей машиной они обрабатываться не могут и приходится тратить время на переключение между ними. Вопрос в том, как я могу ограничить количество потоков, ( т.е. запускать в одном потоке 15 тасков так как рабочая станция позволяет выполнять паралельно 20 потоков) которые будут задействованы для обработки этих тасков. Возможные варианты это ограничение количества потоков в ThreadPool или же запуск через Parallel.For с установкой параметра MaxDegreeOfParallelism. Но есть условие, что окончившаяся асинхронная операция должна продолжить работу в потоке в котором она началась/была запущена. Буду рад любой помощи или источникам, где я смогу увидеть идею реализации.

Upd. Относительно того, почему создаётся поток для запуска асинхронной операции. Источников к которым происходят запросы - много и они разные. Поэтому один экземпляр, который запускается через Task.Run() это обращение только к одному внешнему источнику. Т.е. 300 тасков это 300 разных источников. Также эти данные далее обрабатываются со своей логикой.

READ ALSO
ASP.NET Web API и Angular - ошибка 405

ASP.NET Web API и Angular - ошибка 405

В общем имеется развернутое Web API на IIS 8 с Angular 2 SPAПри использовании метода POST (попытка залогиниться) выдает 405 ошибку, что Htttp verb not allowed

221
Асинхронный вызовы. Блокировка задач. AutoResetEvent

Асинхронный вызовы. Блокировка задач. AutoResetEvent

Добрый день! При вызове метода Set() в AutoResetEvent в обработчике события (EndRequest) происходит полная блокировка всего приложенияНе могу понять почему

195
C# работа с dbf файлами

C# работа с dbf файлами

На последней команде вот такая ошибка:

311
Ошибка The build must be stopped before the solution can be closed

Ошибка The build must be stopped before the solution can be closed

Создал пустой проект XamarinForms в VS 2017, запускаю через F5 или кнопкой:

228