@wraps(self.fn)
async def call(*args, **kwargs) -> Any:
    raw_key = (await self.get_raw_key(*args, **kwargs))
    key = self.get_key(raw_key)
    memo: _AsyncMemo = self.get_memo(key, insert=insert)
    if (memo is None):
        return (await fn(*args, **kwargs))
    self.expire_one_memo()
    async with memo.async_lock:
        if ((insert and (not memo.memo_return_state.called)) or (update and (memo.memo_return_state.value is not _MemoZeroValue))):
            memo.memo_return_state.called = True
            try:
                memo.memo_return_state.value = (await fn(*args, **kwargs))
            except Exception as e:
                memo.memo_return_state.raised = True
                memo.memo_return_state.value = e
            self.bind_key_lifetime(raw_key, key)
        return self.finalize_memo(memo=memo, key=key)
@wraps(self.fn)
async def call(*args, **kwargs) -> Any:
    raw_key = (await self.get_raw_key(*args, **kwargs))
    key = self.get_key(raw_key)
    memo: _AsyncMemo = self.get_memo(key, insert=insert)
    if (memo is None):
        return (await fn(*args, **kwargs))
    self.expire_one_memo()
    async with memo.async_lock:
        if ((insert and (not memo.memo_return_state.called)) or (update and (memo.memo_return_state.value is not _MemoZeroValue))):
            memo.memo_return_state.called = True
            try:
                memo.memo_return_state.value = (await fn(*args, **kwargs))
            except Exception as e:
                memo.memo_return_state.raised = True
                memo.memo_return_state.value = e
            self.bind_key_lifetime(raw_key, key)
        return self.finalize_memo(memo=memo, key=key)