我不知道如何命名这个名字,但这是我的问题:
我有一个类负责存储要初始化的相当重的对象。在第一次调用该类时,我希望初始化静态对象,然后可以使用其他方法检索对象。我检索对象的方法是异步的,如果调用得太快,我希望它等待初始化完成。
但是,我不知道如何等待初始化完成.可能和小溪在一起?
这里有一些代码来说明我的位置:
class Cartography{
static Polygon? _bigObject;
static bool _isLoading = false;
Cartography(){
_loadElement();
}
Future<void> _loadElement() async {
if(_bigobject == null && _isLoading == false){
_isLoading = true;
_bigObject = await bigFunction(); // Loading object ...
_isLoading = false;
}
}
Future<Polygon> getPolygon() async {
await ???? // Waiting the end of the initialisation if the bigObject is not yet initialized ...
// TODO Ask to StackOverflow ...
return _bigObject;
}
}谢谢你的帮助。
发布于 2022-03-17 18:40:08
你最需要的是:
await _loadElement();但是,如果在对_loadElement()的早期调用仍在运行中时可以调用_loadElement(),则它的行为将不正确。第二个调用将看到_isLoading为真并立即返回,第二个调用将在设置_bigObject之前完成。
与维护bool _isLoaded标志不同,您可以存储对_loadElement的第一次调用的Future,并进行所有后续调用-- await --相同的Future。
我使用的一个模式是:
Future<void>? _loadingFuture;
Future<void> _loadElement() async {
Future<void> internalLoad() async {
_bigObject = await bigFunction();
}
return await (_loadingFuture ??= internalLoad());
}
Future<Polygon> getPolygon() async {
await _loadElement();
...
}https://stackoverflow.com/questions/71516644
复制相似问题