Как работает локальная переменная в асинхронном методе? C#

Рейтинг: 0Ответов: 1Опубликовано: 16.02.2023

====================== Имеется код:

async Task HandleUpdateAsync(...)
{
 Base.count++;
 var temp = Base.count;
 //
 //Работа с данными
 //
 Console.WriteLine(temp);
}

Суть:

В асинхронном методе необходимо произвести работу с определённой переменной count(int) из некоторого класса Base. Сам метод вызывается несколько раз подряд. Во время работы программы count меняется со временем и мне нужно вывести определённое состояние этой переменной в консоль. Я отлично понимаю, что будет, если вместо локальной переменной использовать в данной случае глобальную: В консоль выведется последнее состояние этого значения, но что будет в случае с var? Если будет два вызова этого обработчика, то будет два независимых локальных переменных temp?

P.S. В общем и целом, вопрос можно укоротить: Как взаимодействует var и async методы? Создаются ли несколько локальных переменных?

Ответы

▲ 1Принят

Для локальных переменных нет никакой разницы:

  • синхронно ли вызвана функция
  • асинхронно ли вызвана функция
  • многопоточно ли вызвана функция

В любом случае каждый вызов функции порождает новый, независимый от других вызовов, экземпляр локальной переменной.

О чём вам действительно стоит беспокоиться в этом коде - это о потокобезопасности работы с переменной класса Base.count. Асинхронность не обязана обязательно быть многопоточной, но если у вас возможны параллельные вызовы этой функции из разных потоков (это может происходить как синхронно, так и асинхронно), вам нужно позаботиться о том, чтобы операция Base.count++ делалась потокобезопасно.