我有一个应用程序,使用了大量的socketio请求,我做批量请求。当接收数据时,我必须迭代通过一个列表来添加和删除项目:
List carlist;
void receiveData(Map data) {
// Need a lock here
for (var i = 0; i < carlist.lenght;) {
if (data[carlist[i]['name']]['color'] == carlist[i]['color']) {
carlist.removeAt(i);
onDeleteCar(data); // Update the UI.
}
}
// Need a release lock here
}
因为我需要修改列表,所以没有互斥锁就无法工作。
有人有主意吗?
2条答案
按热度按时间2ic8powd1#
dart没有并发线程,因此一个简单的布尔变量就可以作为互斥体工作。
如果您需要另一个异步执行来等待锁被释放并继续执行,而不是仅仅返回,那么它会变得有点复杂。
如果您的方法是从一个事件处理程序调用的,该事件处理程序会非常快地生成大量事件,并且您希望处理每个执行,但仍然只能一个接一个地处理,则可以将调用排队,如下所示:
示例输出
4uqofj5v2#
只需使用包互斥体!
flutter pub add mutex