[英]Coroutine to run SQL in Unity3d
我試圖更深入地了解Unity協程。 它們可以阻止執行,從而產生null或等待,但實際上它們不是新線程。
在我的情況下,Unity應該從數據庫讀取信息,這可能需要一些時間。 這是同步操作 。 這一行代碼可能會阻塞執行幾秒鍾。
我的一部分告訴剛開始新線程。 但是我想知道是否可以使用Unity風格的協程來實現。
private IEnumerator FetchPlayerInfo(int id)
{
// fetch player from DB
using (var session...)
{
// this line is NHibernate SQL query, may take long time
player = session.QueryOver<Player>()...;
}
// raise event to notify listeners that player info is fetched
}
我只是看不到收益。 有人知道嗎?
提前謝謝。
僅當控制流在您自己的協程中時,才能返回產量指令。 如果必須運行長時間的同步操作,並且沒有異步API(這是數據庫所期望的),那么最好啟動另一個線程。
但是,請注意,在Unity中使用其他線程會有些棘手:您將無法使用Unity的任何API,並且必須在主線程中檢查工作線程何時准備好結果。 考慮考慮使用現成的解決方案,例如Loom 。
您可以將yield視為將大型任務分解為多個塊。 在每個塊之后,您讓其他事情發生,然后返回並執行另一個卡盤。 在您的情況下,您將在每個塊中加載X
行數,直到所有數據都加載完畢。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.