invokeAndWait을 보고합니다.
PersistentStateComponent 초기화 수명 주기 메서드:
loadStatenoStateLoadedinitializeComponent서비스 초기화 중 읽기/쓰기 액션을 실행하거나 invokeAndWait을 호출하면 교착 상태를 일으킬 수 있습니다.
예:
Kotlin:
@Service
internal class MyService {
private val myData = initMyData();
constructor() {
val data = runReadAction { // 나쁨: 생성자에서 읽기 액션 실행
// read data
}
}
private fun initMyData(): Data {
return runWriteAction { // 나쁨: myData 프로퍼티 초기화 중 호출
// write data
}
}
companion object {
lateinit var companionData: String
init {
companionData = runReadAction { // 나쁨: init 블록에서 읽기 액션 실행
// read data
}
}
}
}
Java:
@Service
class MyService {
private static final Data ourData1 = ReadAction.compute(() -> {
// read data
});
private static final Data ourData2;
static {
ourData2 = ReadAction.compute(() -> { // 나쁨: static 초기화 블록에서 읽기 액션 실행
// read data
});
}
private final Data myData2 = initMyData();
MyService() {
Data data = WriteAction.compute(() -> { // 나쁨: 생성자에서 읽기 액션 실행
// write data
});
}
private Data initMyData() {
return ReadAction.compute(() -> { // 나쁨: myData 프로퍼티 초기화 중 호출
// read data
});
}
}
PersistentStateComponent:
@Service
@State(...)
internal class MySettings : PersistentStateComponent<MyService> {
var stateValue: String? = null
override fun loadState(state: MySettings) {
val data = runReadAction { // 나쁨: loadState에서 읽기 액션 실행
// read data
}
// ...
}
override fun noStateLoaded() {
val data = runWriteAction { // 나쁨: noStateLoaded에서 읽기 액션 실행
// write data
}
// ...
}
override fun initializeComponent() {
val data = runReadAction { // 나쁨: initializeComponent에서 읽기 액션 실행
// read data
}
// ...
}
}
2024.2의 새로운 기능