GOでは、コンテキストはゴルウチンライフサイクルを管理するための強力なツール、特にキャンセルと締め切りの執行のための強力なツールです。 GOのcontext
パッケージは、API境界とプロセス間のリクエストスコープデータ、キャンセル信号、および締め切りを渡す方法を提供します。
ゴロウチンのキャンセルと締め切りを管理するためにコンテキストを使用するには、コンテキストを作成することから始めます。 context.Background()
またはcontext.TODO()
関数は、ルートコンテキストを作成するために使用され、より具体的なコンテキストを導出するために使用されます。たとえば、Goroutineをキャンセルするには、 context.WithCancel(parent)
を使用して、キャンセルできるコンテキストを作成します。このコンテキストを共有するすべてのゴルチンをキャンセルする場合、 context.WithCancel
によって返されたキャンセル関数を呼び出します。
締め切りを処理するには、 context.WithDeadline(parent, deadline)
またはcontext.WithTimeout(parent, timeout)
を使用して、指定された締め切りまたはタイムアウト後に自動的にキャンセルするコンテキストを作成します。
コンテキストを使用してゴロウチンのライフサイクルを管理する方法の簡単な例を次に示します。
<code class="go">ctx, cancel := context.WithCancel(context.Background()) defer cancel() go func() { for { select { case </code>
GOでゴルチン管理にコンテキストを使用することで、いくつかの利点があります。
GOでコンテキストを使用した締め切りの設定と処理には、 context.WithDeadline
またはcontext.WithTimeout
関数を使用することが含まれます。これがあなたがそれを行う方法です:
context.WithDeadline
を使用します。この関数は、親のコンテキストと締め切りの時間値を取ります。context.WithTimeout
を使用します。この関数には、親のコンテキストと期間が必要です。締め切りを設定して処理する例は次のとおりです。
<code class="go">ctx, cancel := context.WithDeadline(context.Background(), time.Now().Add(5*time.Second)) defer cancel() go func() { for { select { case </code>
この例では、ゴロウチンは締め切りに到達するか、手動でキャンセルされるまで実行されます。
GOのコンテキストは、複数のゴルチンでキャンセル信号を伝播するのに特に役立ちます。 context.WithCancel
、 context.WithDeadline
、またはcontext.WithTimeout
でコンテキストを作成すると、このコンテキストを複数のゴルチンと共有できます。コンテキストがキャンセルされた場合(手動または期限に到達したため)、コンテキストを監視しているすべてのゴルチンは、 ctx.Done()
チャネルを介して通知されます。
これがどのように機能しますか:
ctx.Done()
を聞いて、いつ実行を停止するかを知る必要があります。これを示している例は次のとおりです。
<code class="go">ctx, cancel := context.WithCancel(context.Background()) defer cancel() go func() { for { select { case </code>
この例では、コンテキストがキャンセルされると、両方のゴルチンが3秒後に停止します。これは、コンテキストが複数のゴルチンでキャンセル信号を効果的に伝播するのに役立つ方法を示しています。
以上がGoroutineキャンセルと締め切りを管理するために、どのようにコンテキストを使用できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。