Мы разрабатываем приложение, в котором пользователи могут запускать несколько задач одновременно. Мы используем ThreadPool.QueueUserWorkItem для запуска задач. Эта часть работает хорошо.
У нас есть проблема, когда эти задачи могут потреблять более 500 МБ памяти. Мы используем ввод-вывод с отображением памяти для управления памятью. Тем не менее, когда пользователи устанавливают более 10 задач, работающих одновременно, пул потоков запускает их все, и были случаи, когда у нас заканчивалась память и возникали исключения. Мы прекрасно справляемся с ошибками.
Мне интересно, есть ли способ учесть память, которая будет потребляться при обработке очереди, то есть держать задачи в очереди до тех пор, пока не будет достаточно памяти? Могу ли я сообщить пулу потоков о том, сколько памяти мы будем запрашивать (что мы можем приблизительно оценить)?