mirror of
https://github.com/Radarr/Radarr.git
synced 2026-04-27 22:57:09 -04:00
2167da87ce
Fixes #8201 Fixes #8202 Fixes #8203 Fixes #8204 Fixes #8205 Fixes #8207 Fixes #8208 Fixes #8209 Fixes #8210 Fixes #8211 Fixes #8212 Fixes #8213 Fixes #8214 Fixes #8215 Closes #8216 Fixes #8217 Closes #8218 Fixes #8219 Closes #8220
57 lines
1.2 KiB
C#
57 lines
1.2 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Threading;
|
|
|
|
namespace NzbDrone.Test.Common
|
|
{
|
|
public class ConcurrencyCounter
|
|
{
|
|
private readonly object _mutex = new object();
|
|
private readonly Dictionary<int, int> _threads = new Dictionary<int, int>();
|
|
private int _items;
|
|
|
|
public int MaxThreads => _threads.Count;
|
|
|
|
public ConcurrencyCounter(int items)
|
|
{
|
|
_items = items;
|
|
}
|
|
|
|
public void WaitForAllItems()
|
|
{
|
|
while (_items != 0)
|
|
{
|
|
Thread.Sleep(500);
|
|
}
|
|
}
|
|
|
|
public int Start()
|
|
{
|
|
int threadId = Environment.CurrentManagedThreadId;
|
|
lock (_mutex)
|
|
{
|
|
_threads[threadId] = 1;
|
|
}
|
|
|
|
Console.WriteLine("Starting " + threadId);
|
|
return threadId;
|
|
}
|
|
|
|
public void SimulateWork(int sleepInMs)
|
|
{
|
|
var id = Start();
|
|
Thread.Sleep(sleepInMs);
|
|
Stop(id);
|
|
}
|
|
|
|
public void Stop(int id)
|
|
{
|
|
Console.WriteLine("Finished " + id);
|
|
lock (_mutex)
|
|
{
|
|
_items--;
|
|
}
|
|
}
|
|
}
|
|
}
|