繁体   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