ホームページ > バックエンド開発 > Golang > チャネルの使用時に Goroutine タイムアウト ケースが実行されないのはなぜですか?

チャネルの使用時に Goroutine タイムアウト ケースが実行されないのはなぜですか?

Linda Hamilton
リリース: 2024-12-19 10:03:08
オリジナル
745 人が閲覧しました

Why Doesn't My Goroutine Timeout Case Execute When Using Channels?

GoroutineChannels でタイムアウト ケースが実行されない

ゴルーチンとチャネルを特徴とするコード スニペットで、ユーザーはタイムアウト ケースが次の不可解な状況に遭遇します。 select ステートメントは実行されないままになります。

提供されたコードは 2 つのステートメントを確立します。 1 つは 1.5 秒ごとにチャネルに値を送信し、もう 1 つは値をリッスンするか、2 秒後にタイムアウトをトリガーします。ただし、タイムアウトのケースは決して発生しません。

なぜこの動作が観察されるのですか?

重要なのは、選択ループの各反復でタイムアウト チャネルが繰り返し作成されることにあります。 c1 チャネルから値を受信するたびに、time.After() によって新しいチャネルが生成されます。この新しいチャネルはさらに 2 秒後に値を受け取りますが、以前のタイムアウト チャネルは廃止されます。したがって、タイムアウト ケースは実行できません。

この問題を修正し、タイムアウトが期待どおりに発生するようにするには、選択ループの前にタイムアウト チャネルを 1 回だけ作成します。そうすることで、プログラムの実行中チャネルはアクティブなままとなり、c1 チャネルで 2 秒間の非アクティブ状態が続いた後にタイムアウト ケースがトリガーされます。

以上がチャネルの使用時に Goroutine タイムアウト ケースが実行されないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート