欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android?flutter?Dio鎖的巧妙實(shí)現(xiàn)方法示例

 更新時(shí)間:2023年01月17日 15:17:02   作者:linversion  
這篇文章主要為大家介紹了Android?flutter?Dio鎖的巧妙實(shí)現(xiàn)方法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

正文

看Dio庫源碼的時(shí)候,發(fā)現(xiàn)其攔截器管理的邏輯處用到了一個(gè)Lock,這個(gè)Lock巧妙地利用了Completer和Future的機(jī)制來實(shí)現(xiàn),記錄一下。

/// Add lock/unlock API for interceptors.
class Lock {
  Future? _lock;
  late Completer _completer;
  /// 標(biāo)識(shí)攔截器是否被上鎖
  bool get locked => _lock != null;
  /// Lock the interceptor.
  ///
 ///一旦請求/響應(yīng)攔截器被鎖,后續(xù)傳入的請求/響應(yīng)攔截器將被添加到隊(duì)列中,它們將不會(huì)
///繼續(xù),直到攔截器解鎖
  void lock() {
    if (!locked) {
      _completer = Completer();
      _lock = _completer.future;
    }
  }
  /// Unlock the interceptor. please refer to [lock()]
  void unlock() {
    if (locked) {
    //調(diào)用complete()
      _completer.complete();
      _lock = null;
    }
  }
  /// Clean the interceptor queue.
  void clear([String msg = 'cancelled']) {
    if (locked) {
    //complete[future] with an error
      _completer.completeError(msg);
      _lock = null;
    }
  }
  /// If the interceptor is locked, the incoming request/response task
  /// will enter a queue.
  /// 
  /// [callback] the function  will return a `Future`
  /// @nodoc
  Future? enqueue(EnqueueCallback callback) {
    if (locked) {
      // we use a future as a queue
      return _lock!.then((d) => callback());
    }
    return null;
  }
}

以上就是Android flutter Dio鎖的巧妙實(shí)現(xiàn)方法示例的詳細(xì)內(nèi)容,更多關(guān)于Android flutter Dio鎖的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評(píng)論