在協程編程中可直接使用try/catch處理異常。但必須在協程內捕獲,不得跨協程捕獲異常。
不僅是應用層throw的Exception,底層的一些錯誤也是可以被捕獲的,如function、class、method不存在
錯誤? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? (推薦學習: swoole視頻教程)
下面的代碼中,try/catch和throw在不同的協程中,協程內無法捕獲到此異常。
當協程退出時,發現有未捕獲的異常,將引起致命錯誤。
Fatal?error:?Uncaught?RuntimeException try?{ ????swooleCoroutine::create(function?()?{ ????????throw?new?RuntimeException(__FILE__,?__LINE__); ????}); } catch?(Throwable?$e)?{ ????echo?$e; }
正確
在協程內捕獲異常。
function?test()?{ ????throw?new?RuntimeException(__FILE__,?__LINE__); } SwooleCoroutine::create(function?()?{ ????try?{ ????????test(); ????} ????catch?(Throwable?$e)?{ ????????echo?$e; ????} });
? 版權聲明
文章版權歸作者所有,未經允許請勿轉載。
THE END