首页 » PHP教程 » phpcontext技巧_PHP 实现Golang Context包

phpcontext技巧_PHP 实现Golang Context包

访客 2024-11-04 0

扫一扫用手机浏览

文章目录 [+]

github地址 :https://github.com/qq1060656096/php-go-context

context利用闭坑指南

1. 将一个Context参数作为第一个参数通报给传入和传出要求之间调用路径上的每个函数2. 对应做事器要求该当创建一个 context 3. 不应该在构造体 、数组、map、工具中存储context,相反应该将 context 显示的通报给每个须要它的函数4. 它们之间的调用连必须传播高下文,利用 WithCancel() WithDeadline() WithTimeout() WithValue()5. 当一个 context 取消时,从它派生出的所有 context 也会被取消。
6. 同一个Context可以通报给在不同的goroutine中运行的函数;高下文对付多个goroutine同时利用是安全的。
7. 不要通报 nil Context,即是函数许可。
如果你不知道利用哪个 context,请利用 Todo()8. 对付所有堵塞或者永劫的操作都是该当可以取消的。
9. 利用 WithValue() 会利用流程模糊,但是有时我们不得不用,须要我们谨慎利用。
10. 开拓业务时,老代码函数不必遵守,Context参数作为老函数的第一个参数。
11. 开拓业务时,如果有新旧代码,请保持新代码必须传 context12. 开拓业务时,如果有新旧代码,请保持老代码没有通报 context 做兼容,如设置默认值
Background()

返回一个空context,它不会被取消,只作为根 context,用于要求级别的 顶级context

phpcontext技巧_PHP 实现Golang Context包

Todo()

返回一个空context,当不清楚要利用哪个 Context 或 函数还没实现 Context,你该当利用 Todo()

phpcontext技巧_PHP 实现Golang Context包
(图片来自网络侵删)
WithValue()

返回 携带 parent 副本的ValueCtx并把key val关联,用于要求范围内的数据利用高下文值。
利用 WithValue() 会利用流程模糊,但是有时我们不得不用,须要我们谨慎利用。

include_once __DIR__.'/../vendor/autoload.php';use function Zwei\Context\WithValue;use function Zwei\Context\Background;$ctx1 = WithValue(Background(), "key1", "valueV1");$ctx2 = WithValue($ctx1, "key1", "valueV2");var_dump($ctx1->Value("key1"));//输出:valueV1var_dump($ctx2->Value("key1"));//输出:valueV2WithCancel()

返回带有父级副本 CancelCtx,当返回的 cancel函数被调用时,当前 context 和 子context Done 返回 true。
CancelCtx开释与此高下有关的资源,因此代码该当在高下文中运行操作完成或者非常后调用。

<?php# 示例文件路径 Examples/WithCancel.phpinclude_once __DIR__.'/../vendor/autoload.php';use function Zwei\Context\WithCancel;use function Zwei\Context\Background;use function Zwei\Context\Canceled;use Zwei\Context\Context;use Zwei\Context\CancelCtx;$ctx = Background();/ @var CancelCtx $ctx1/list($ctx1, $cancelFunc) = WithCancel($ctx);try { rpc1($ctx1); rpc2($ctx1); Business($ctx1); $cancelFunc();// 取消 CancelCtx echo "手动取消\n";} catch (Exception $e) { $cancelFunc(); echo "非常取消\n"; throw $e;}var_dump($ctx1->Err() === Canceled());

标签:

相关文章

执业药师试卷代码解码药师职业发展之路

执业药师在药品质量管理、用药安全等方面发挥着越来越重要的作用。而执业药师考试,作为进入药师行业的重要门槛,其试卷代码更是成为了药师...

PHP教程 2025-02-18 阅读1 评论0

心灵代码主题曲唤醒灵魂深处的共鸣

音乐,作为一种独特的艺术形式,自古以来就承载着人类情感的表达与传递。心灵代码主题曲,以其独特的旋律和歌词,唤醒了无数人的灵魂深处,...

PHP教程 2025-02-18 阅读1 评论0

探寻福建各市车牌代码背后的文化内涵

福建省,地处我国东南沿海,拥有悠久的历史和丰富的文化底蕴。在这片充满魅力的土地上,诞生了许多具有代表性的城市,每个城市都有自己独特...

PHP教程 2025-02-18 阅读1 评论0

探寻河北唐山历史与现代交融的城市之光

河北省唐山市,一座地处渤海之滨,拥有悠久历史和独特文化的城市。这里既是古丝绸之路的起点,也是中国近代工业的发源地。如今,唐山正以崭...

PHP教程 2025-02-18 阅读1 评论0