簡體   English   中英

協程在Unity3d中運行SQL

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM