Skip to content

Commit a5b3861

Browse files
committed
async_scope::spawn provides inline_scheduler as the current scheduler
1 parent 2456721 commit a5b3861

File tree

1 file changed

+14
-5
lines changed

1 file changed

+14
-5
lines changed

include/exec/async_scope.hpp

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -222,6 +222,7 @@ namespace exec {
222222
return __nest_operation_t<_Receiver>{
223223
__self.__scope_, ((_Self&&) __self).__c_, (_Receiver&&) __rcvr};
224224
}
225+
225226
template <__decays_to<__nest_sender> _Self, class _Env>
226227
friend auto tag_invoke(get_completion_signatures_t, _Self&&, _Env&&)
227228
-> completion_signatures_of_t<__copy_cvref_t<_Self, _Constrained>, __env_t<_Env>> {
@@ -597,10 +598,17 @@ namespace exec {
597598

598599
////////////////////////////////////////////////////////////////////////////
599600
// async_scope::spawn implementation
601+
template <class _Env>
602+
using __spawn_env_t = __result_of<
603+
__join_env,
604+
_Env,
605+
__env::__prop<get_stop_token_t, in_place_stop_token>,
606+
__env::__prop<get_scheduler_t, __inln::__scheduler>>;
607+
600608
template <class _EnvId>
601609
struct __spawn_op_base {
602610
using _Env = __t<_EnvId>;
603-
__env_t<_Env> __env_;
611+
__spawn_env_t<_Env> __env_;
604612
void (*__delete_)(__spawn_op_base*);
605613
};
606614

@@ -623,7 +631,7 @@ namespace exec {
623631
std::terminate();
624632
}
625633

626-
friend const __env_t<_Env>& tag_invoke(get_env_t, const __spawn_rcvr& __self) noexcept {
634+
friend const __spawn_env_t<_Env>& tag_invoke(get_env_t, const __spawn_rcvr& __self) noexcept {
627635
return __self.__op_->__env_;
628636
}
629637
};
@@ -638,8 +646,9 @@ namespace exec {
638646

639647
template <__decays_to<_Sender> _Sndr>
640648
__spawn_op(_Sndr&& __sndr, _Env __env, const __impl* __scope)
641-
: __spawn_op_base<_EnvId>{make_env((_Env&&) __env,
642-
with(get_stop_token, __scope->__stop_source_.get_token())),
649+
: __spawn_op_base<_EnvId>{__join_env((_Env&&) __env,
650+
__mkprop(get_stop_token, __scope->__stop_source_.get_token()),
651+
__mkprop(get_scheduler, __inln::__scheduler{})),
643652
[](__spawn_op_base<_EnvId>* __op) {
644653
delete static_cast<__spawn_op*>(__op);
645654
}}
@@ -682,7 +691,7 @@ namespace exec {
682691
return nest_result_t<_Constrained>{&__impl_, (_Constrained&&) __c};
683692
}
684693

685-
template <__movable_value _Env = empty_env, sender_in<__env_t<_Env>> _Sender>
694+
template <__movable_value _Env = empty_env, sender_in<__spawn_env_t<_Env>> _Sender>
686695
requires sender_to<nest_result_t<_Sender>, __spawn_receiver_t<_Env>>
687696
void spawn(_Sender&& __sndr, _Env __env = {}) {
688697
using __op_t = __spawn_operation_t<nest_result_t<_Sender>, _Env>;

0 commit comments

Comments
 (0)