У меня есть цикл, который выглядит примерно так:
var list = new List<float>();
while (list.Count < wantedNumberOfJobs)
{
var resource = ... //gets the resource
lock (resource)
{
ThreadPool.QueueUserWorkItem(DoWork, /*wrap resource and list into an object*/);
}
}
//continue pass this point when all the threads are finished
И метод работы:
private void DoWork(object state)
{
var list = (/*wrapperObject*/)state.List;
var someFloat = //do the work to get the number
lock (list)
{
list.Add(someFloat);
}
}
По сути, я хочу выполнить большое, но конкретное (заданное wantedNumberOfJobs
) количество выполненных работ. Каждое из этих заданий вставляет один элемент в list
, как вы можете видеть в методе DoWork
.
Я не уверен, что этот код убеждает меня в том, что list
будет содержать wantedNumberOfJobs
предметов после обозначенной точки. Я также хотел бы ограничить количество активных тем. Я использовал класс System.Threading.Semaphore
, но не уверен, что это лучшее решение.
Буду признателен за любую помощь. Спасибо!