--- /dev/null
+.. change::
+ :tags: usecase, asyncio
+ :tickets: 6583
+
+ Implement a new :class:`_asyncio.async_scoped_session` to address some incompatible method interface
+ between :class:`.scoped_session` and :class:`_asyncio.AsyncSession`, in which some
+ method (e.g. remove) should be used with the async keyword async/await. Additionally, In order to avoid code
+ redundancy, a :class:`_ScopedSessionMixin` is created and inherited in both :class:`.scoped_session`
+ and :class:`_asyncio.async_scoped_session`.
.. currentmodule:: sqlalchemy.ext.asyncio
+Using asyncio scoped session
+----------------------------
+
+The usage of :class:`_asyncio.async_scoped_session` is mostly similar to :class:`.scoped_session`.
+However, since there's no "thread-local" concept in the asyncio context, the "scopefunc" paramater
+must be provided during initialization. Additionally, :class:`_asyncio.async_scoped_session` also
+include **proxy behavior** like :class:`.scoped_session`, which means it can be treated as a
+:class:`_asyncio.AsyncSession` directly::
+
+ from asyncio import current_task
+
+ from sqlalchemy.orm import sessionmaker
+ from sqlalchemy.ext.asyncio import async_scoped_session
+ from sqlalchemy.ext.asyncio import AsyncSession
+
+ async_session_factory = sessionmaker(some_async_engine, class_=_AsyncSession)
+ AsyncSession = async_scoped_session(async_session_factory, scopefunc=current_task)
+
+ some_async_session = AsyncSession()
+
+
Engine API Documentation
-------------------------
.. autofunction:: async_session
+.. autoclass:: async_scoped_session
+ :members:
+ :inherited-members:
+
.. autoclass:: AsyncSession
:members: