擅长:python、mysql、java
<blockquote>
<p>Question: Is there a clean way to optionally await a coroutine, without the need to unpack the coroutine and its arguments like <code>aget("duh", foo, arg)</code>.</p>
</blockquote>
<p>您可以创建任务,但在它有机会开始运行之前取消它:</p>
<pre><code> async def aget(self, name, default):
try:
obj = self.cache["name"]
except KeyError:
return await default
else:
asyncio.create_task(default).cancel()
return obj
</code></pre>
<p>如果你走这条路,一定要测量创建和取消任务的开销。因为它发生在代码的热路径上(大概),所以可能会影响性能</p>