PHP では、コルーチンはコードの実行効率を向上させる強力なプログラミング ツールです。コルーチンでは、メイン コルーチン コンテキストのコピーをサブルーチン コンテキストに渡すのが一般的な操作です。このようにして、サブルーチン内でメインコルーチンのコンテキストデータにアクセスし、データの共有と転送を実現します。 PHP ではこのプロセスは非常に簡単で、yield キーワードを使用するだけです。この記事では、メイン コルーチン コンテキストのコピーをサブルーチン コンテキストに渡す方法を詳しく紹介し、この機能をより深く理解し、適用するのに役立つサンプル コードをいくつか示します。
Golang API エンドポイントとそれに関連するコンテキストがあります。
エンドポイントは舞台裏で重い作業を行う必要があるため、メイン エンドポイント内に新しいサブルーチンを作成し、応答自体を返します。
コンテキストのキャンセルを処理するには、バックグラウンド コンテキストを作成し、それを新しいコンテキストとしてサブルーチンに渡します。
問題は、これを行うと、はい、バックグラウンドサブルーチンを実行できますが、リクエストID、スパンIDなどのメインコンテキストの値(ほとんどのキーがわかりません)であることです。 、トレースに使用されたものは失われます。
クライアントに応答が送信された後でも、実行をキャンセルせずに親コンテキストを子ルーチンに渡す方法。
######編集######回避策
親コンテキストをキャンセルすると、そこから派生したすべてのコンテキストもキャンセルされます。したがって、リクエスト ハンドラーによって生成されたゴルーチンの新しいコンテキストを作成するのは正しいことです。
context.background()
から新しいコンテキストが作成されます。ハンドラーから作成されたゴルーチンにコンテキストとして
newcontext を渡します。
以上がメインのコルーチン コンテキストのコピーをサブルーチン コンテキストに渡します。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。