У меня есть несколько экземпляров одного и того же приложения, которые запускаются одновременно и работают в течение равного периода времени (почти). Каждое приложение использует задачи для параллельного программирования внутри них. Теперь я хочу ограничить количество параллельных задач, которые могут выполняться в этих экземплярах приложения. Как мне это сделать? Я пробовал использовать семафор. Но не повезло. Допустим, у меня запущено 5 экземпляров приложения. Первый экземпляр создает семафор и удерживает его в течение n секунд. Оставшиеся четыре экземпляра ждут n секунд, и это нормально. Но по прошествии этих n секунд первый экземпляр выходит, я думаю, удаляя экземпляр семафора. После этого остальные 4 начинают выполняться параллельно. Пожалуйста, помогите.
Мой код будет выглядеть примерно так:
static void Main(string[] args)
{
List<string> itemList = GetItemList();
Semaphore throttler = new Semaphore(2, 2, "MySemaPhore");
foreach (var item in itemList)
{
throttler.WaitOne();
Task.Run(() =>
{
try
{
DoWork(item);
}
finally
{
throttler.Release();
}
});
}
}