在Python Lan Ref。 3.4.4,据说[Route("api/Stripe")]
[HttpPost]
public async Task<IActionResult> Post()
和__aenter__()
必须返回等待物。但是,在示例异步上下文管理器中,这两个方法返回None:
__aexit__()
这段代码是否正确?
答案 0 :(得分:2)
此示例中的方法不返回None
。它们是async
函数,它们自动返回(等待)异步协同程序。这类似于生成器函数返回生成器迭代器的方式,即使它们通常没有return
语句。
答案 1 :(得分:2)
您的__aenter__
方法必须返回上下文。
class MyAsyncContextManager:
async def __aenter__(self):
await log('entering context')
# maybe some setup (e.g. await self.setup())
return self
async def __aexit__(self, exc_type, exc, tb):
# maybe closing context (e.g. await self.close())
await log('exiting context')
async def do_something(self):
await log('doing something')
用法:
async with MyAsyncContextManager() as context:
await context.do_something()