Я столкнулся с проблемой безопасности параллелизма в режиме StrictConcurrency Swift 5.10, которую пытаюсь решить. Я работаю со структурой EnvironmentKey, которая включает статическое свойство, определенное как асинхронное замыкание, возвращающее необязательный пользовательский актер. Вот упрощенный фрагмент кода:
Код: Выделить всё
struct DataHandlerKey: EnvironmentKey {
static var defaultValue: @Sendable () async -> Hello? = { nil }
}
actor Hello {}
Значение по умолчанию — это замыкание, отмеченное @Sendable, которое асинхронно возвращает необязательный экземпляр субъекта Hello. Однако Swift 5.10 с компилятором StrictConcurrency выдает ошибку безопасности параллелизма, заявляя:
Код: Выделить всё
Static property 'defaultValue' is not concurrency-safe because it is non-isolated global shared mutable state; this is an error in Swift 6.
Я понимаю, что проблема связана со статическим свойством, которое потенциально может привести к неизолированному глобальному общему изменяемому состоянию, но я не знаю, как настроить свой код, чтобы он соответствовал расширенной безопасности параллелизма Swift 6. требования. Актер Hello спроектирован так, чтобы обеспечить безопасность параллелизма, но я не могу использовать его по назначению в этом контексте.
Любые идеи, предложения или ссылки на соответствующую документацию был бы очень признателен. Заранее благодарю за помощь!
Источник:
https://stackoverflow.com/questions/781 ... ronmentkey