У меня есть APIController, обрабатывающий почтовые запросы, который вызывает метод stati c в классе stati c, и я хочу вернуть следующее значение в словаре stati c в классе stati c. Например, поступает запрос, и я хочу найти следующий индекс для использования в этом словаре, а затем увеличить этот индекс на 1 в значении свойства stati c. Это прекрасно работает, когда я отправляю вызовы по 1 за раз, но когда одновременно поступают 2 вызова, они оба возвращают значение сохранения из метода stati c.
Я пытаюсь найти способ заблокировать метод stati c, чтобы он мог обрабатывать 1 поток за раз, независимо от того, сколько одновременных вызовов поступает в методе stati c, выполняется синхронно. Вот в основном код, который я звоню. Если это вызывается дважды одновременно, они оба возвращают одно и то же значение, а это не то, что я хочу.
public static class Manager
{
public static Dictionary<string, bool> ServerList { get; set; }
public static int NumberOfServers { get; set; }
public static int NextServerIndex { get; set; }
public static string GetNextServer()
{
int indextocheck = NextServerIndex;
string servername= null;
if (indextocheck >= NumberOfServers)
indextocheck = 0;
while (timer < maxtime)
{
if (ServerList.Values.ElementAt(indextocheck) == false)
{
servername = ServerList.Keys.ElementAt(indextocheck);
ServerList[server] = true;
NextServerIndex = indextocheck + 1;
break;
}
indextocheck++;
if (indextocheck == NumberOfServers)
indextocheck = 0;
}
return servername
}
}
Очевидно, что я что-то здесь упускаю, так как думал, что метод stati c (в классе stati c) будет работать синхронно. Что я могу сделать, чтобы выполнить sh то, что я пытаюсь сделать?
Спасибо!