【发布时间】:2021-04-22 01:39:01
【问题描述】:
我是 BLoC 设计模式的新手,对此我有一个问题:
state 是否需要(绿色)线程安全?
我在下面给出一个简短的伪代码:
class Bloc {
State state;
StreamSubscription subscription;
void subscribe(Stream src) {
this.subscription = src.listen(this.businessLogic);
}
async void businessLogic(Object data) {
State oldState = this.state;
State newState = await someAsyncFunction(oldState); // <-- here
this.state = newState;
}
}
在这种情况下,如果两个数据连续到达src,我猜可能会发生竞争条件:
如果第二个数据到达而第一个数据正在等待someAsyncFunction,则oldState 将是businessLogic 第一次和第二次调用的初始状态。
对这个问题有什么好的见解吗?谢谢!
【问题讨论】: