ホームページ  >  記事  >  バックエンド開発  >  Go の WithTimeout を使用してタイムアウトが発生したことを検出する方法

Go の WithTimeout を使用してタイムアウトが発生したことを検出する方法

WBOY
WBOY転載
2024-02-09 11:00:18635ブラウズ

如何使用 Go 的 WithTimeout 检测超时发生

この記事では、Go言語のWithTimeout関数を使ってタイムアウトの発生を検出する方法をphpエディタXinyiが紹介します。 WithTimeout関数はGo言語の標準ライブラリにある関数で、タイムアウトを設定することができ、指定時間内に操作が完了しない場合にタイムアウトが発生したかどうかを判定することができます。 WithTimeout 関数を合理的に使用することで、プログラムの長時間の待機やブロックを回避し、プログラムのパフォーマンスと安定性を向上させることができます。次に、Go言語でタイムアウト問題を処理するスキルをよりよくマスターするために、WithTimeout関数の使い方と注意点を詳しく紹介します。

質問の内容

次の go コードがあります:

リーリー

context.withtimeoutを使用して関数をタイムアウトしようとしました。

私が理解できなかったのは、タイムアウトが発生した場合に err を設定する方法です。

Go ドキュメントの例を見ましたが、よくわかりません。 <-ctx.done() この条件は常にタイムアウトに達したことを意味するのでしょうか?この例はその逆を示しているようです。<-ctx.done() は、コードがタイムアウトせずに最後まで実行されることを意味します。

context.withtimeout を使用して実行されているコードがタイムアウトしたかどうかを検出する方法についての手順を探しています。

さらに、タイムアウトが発生したかどうかをコード内のどこで確認すればよいのかを理解したいと考えています。最初に考えたのは、このチェックを関数の最後に置くことでしたが、チェックするには遅すぎますか?

解決策

コンテキストがタイムアウトしたかどうかを検出するには、ctx.error() を確認します。エラーが context.canceled の場合、コンテキストは cancel() 関数を使用してキャンセルされています。 context.deadlineexceeded の場合はタイムアウトになります。

コンテキストがキャンセルされたかタイムアウトしたかを確認するには、次を使用します。

リーリー

以上がGo の WithTimeout を使用してタイムアウトが発生したことを検出する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はstackoverflow.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。