首頁 > 後端開發 > Golang > 為什麼使用通道時我的 Goroutine 逾時案例不執行?

為什麼使用通道時我的 Goroutine 逾時案例不執行?

Linda Hamilton
發布: 2024-12-19 10:03:08
原創
743 人瀏覽過

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

超時情況未在GoroutineChannel 中執行

在一個包含Goroutine 和Channel 的程式碼片段中,使用者遇到了一個令人困惑的情況,其中超時情況在select 語句仍未執行。

提供的程式碼建立了兩個goroutine,一個每 1.5 秒向通道發送一次值,另一個監聽值或在 2 秒後觸發逾時。但是,超時情況從未發生。

為什麼會出現這種行為?

關鍵在於在 select 迴圈的每次迭代中重複建立逾時通道。每次從 c1 通道接收到一個值時,time.After() 都會產生一個新通道。這個新通道將在另外 2 秒後收到一個值,但先前的超時通道將變得過時。因此,超時情況永遠無法執行。

要修正此問題並確保逾時如預期發生,請在 select 循環之前僅建立一次逾時通道。透過這樣做,通道在程式執行過程中保持活動狀態,並且 c1 通道上不活動 2 秒後將觸發逾時情況。

以上是為什麼使用通道時我的 Goroutine 逾時案例不執行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板