Go のコンテキスト キャンセル機能を使用して、進行中の Goroutine を適切にキャンセルします。コンテキスト パッケージを使用して、タイムアウトのあるコンテキストを作成します。関数が戻ったときにコンテキストをキャンセルするには、defer を使用します。 Goroutine の select ステートメントを使用して、キャンセル イベントをリッスンします。
Goroutine でコンテキストキャンセル関数を使用するにはどうすればよいですか?
Go では、コンテキスト キャンセル メカニズムを使用して、特定の条件が満たされたときに進行中の Goroutine を適切にキャンセルできます。これは、バックグラウンドで実行する必要があるが、必要に応じてキャンセルできるタスクに便利です。
使用シナリオ
コンテキストのキャンセルは、次のシナリオに特に適しています:
実装の詳細
へコンテキストキャンセルを使用してください。 context パッケージを使用する必要があります。以下に示すように:context
包。如下所示:
package main import ( "context" "fmt" "time" ) func main() { ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) defer cancel() go func() { for { select { case <-ctx.Done(): fmt.Println("Context cancelled!") return default: fmt.Println("Working...") time.Sleep(1 * time.Second) } } }() time.Sleep(10 * time.Second) }
在这个示例中:
context.WithTimeout()
创建了一个新的上下文,它将超时 5 秒。defer cancel()
确保在 main 函数返回时取消上下文。ctx.Done()
通道收到信号时退出。实战案例
在真实的应用程序中,上下文取消可以用于以下任务:
注意事项
请注意以下注意事项:
context.Done()
通道来监听取消事件。defer cancel()
来在函数返回时取消上下文。select
rrreeecontext.WithTimeout()
は、5 秒間タイムアウトになる新しいコンテキストを作成します。
defer cancel()
は、main 関数が返されたときにコンテキストが確実にキャンセルされるようにします。 Goroutine は無限ループを実行し、
ctx.Done()
チャネルがシグナルを受信すると終了します。 メインプロセスは 10 秒後に終了し、この時点で Goroutine はキャンセルされます。 実際のケース実際のアプリケーションでは、コンテキストのキャンセルは次のタスクに使用できます: Web サーバー: ユーザーがリクエストをキャンセルしたときに HTTP ハンドラーをキャンセルします。 データベース接続: データベース接続が必要なくなったら、データベースクエリをキャンセルします。 ファイル I/O: ファイル転送をキャンセルする必要がある場合は、I/O 操作をキャンセルします。 注意事項次の注意事項に注意してください:
context.Done()
チャネルを使用して、キャンセル イベントをリッスンします。 関数が戻ったときにコンテキストをキャンセルするには、Goroutine で
defer cancel()
を使用する必要があります。 必要に応じて
select
ステートメントを使用して、Goroutine でキャンセル イベントをリッスンします。
以上がGoroutine でコンテキストキャンセル機能を使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。