协待可帮助完成.
构 任务{构 承诺类型{任务 取中对象(){中{协程句柄<任务::承诺类型>::从承诺(*本)};}从不挂起 初始挂起(){中{};}从不挂起 止挂起()无异{中{};}空 中空(){}空 未处理异常(){}};协程句柄<任务::承诺类型>句柄_;};构 等待器{极 准备好协(){中 假;}空 挂起协(协程句柄<任务::承诺类型>句柄){线程([句柄]{句柄();}).分离();}空 恢复协(){}};任务 测试(){输出<<"线程标识&#61;"<<本线程::取标识()<<"\n";协待 恢复新线程型{};输出<<"线程标识&#61;"<<本线程::取标识()<<"\n";
}整 主(){测试();本线程::休息(时间::秒(2));}
#1与#3
的输出线程标识不一样.协待
允许在另外线程
中恢复协程
,恢复点后代码
在另一线程
中执行了.
线程安全
任务 测试(共针<整>值){输出<<"线程标识&#61;"<<本线程::取标识()<<"\n";协待 恢复新线程型{};*值&#61;42;输出<<"线程标识&#61;"<<本线程::取标识()<<"\n";
}
在另外
线程访问与释放,可能不安全.
挂起协,还可再简化一下为:
空 挂起协(协程句柄<任务::承诺类型>句柄)
{线程(句柄).分离();
}
协程句柄
是可调用
的,可直接作为线程函数,句柄内部调用句柄.恢复()
方法.
协待的式
还可为可等待
对象或函数.
动 恢复新线程()
{构 等待器{极 准备好协(){中 假;}空 挂起协(协程句柄<任务::承诺类型>句柄){线程(句柄).分离();}空 恢复协(){}};中 等待器{};
}任务 测试(){协待 恢复新线程();
}
返回
的还是等待器
对象,隐藏了该局部类型
,其他没啥区别.