Асинхронность подразумевает что в любой момент времени работает только один поток, тут нет никакой конкуренции. Сначала одна часть программы поменяет значение переменной, затем другая использует новое значение.
А для того, чтобы проверка с бд сработала с текущим значением переменной и не боятся, что при переключении контекста, кто-то поменяет значение, можно передать весь список за раз в запрос (аля подставить в секцию in (..) в sql) , а
не в цикле гонять - это будет с точки зрения производительности. Либо второй вариант: сделайте копию глубокую переменной в асинхронной функции, чтобы эта копия полностью была в локальном скоупе, и тогда даже переключение контекста ничего не испортит.