在Unity / C#中,.Net的async / await是否确实从另一个线程开始?

胖子

对于在Unity中专门研究此难题的人来说,这一点很重要

请确保看到我问的另一个问题,它提出了相关的关键问题:

具体来说,在Unity中,等待在哪里真正地返回到“哪里”?


对于C#专家,Unity是单线程的1

通常在另一个线程上执行计算等。

当您在另一个线程上执行某些操作时,经常会使用async / wait,因为,所有好的C#程序员都说这是简单的方法!

void TankExplodes() {

    ShowExplosion(); .. ordinary Unity thread
    SoundEffects(); .. ordinary Unity thread
    SendExplosionInfo(); .. it goes to another thread. let's use 'async/wait'
}

using System.Net.WebSockets;
async void SendExplosionInfo() {

    cws = new ClientWebSocket();
    try {
        await cws.ConnectAsync(u, CancellationToken.None);
        ...
        Scene.NewsFromServer("done!"); // class function to go back to main tread
    }
    catch (Exception e) { ... }
}

好的,因此,当您执行此操作时,在Unity / C#中以更常规的方式启动线程时,您将做所有事情,就像“通常一样” (因此使用Thread或其他方法,或者让本机插件执行它,或OS或其他方法)可能是这样)。

一切顺利。

作为一个la脚的Unity程序员,他只知道足够的C#来解决问题,我一直认为上面的async / await模式实际上会启动另一个线程

实际上,上面的代码是从字面上启动另一个线程的,还是在使用natty异步/等待模式时c#/。Net是否使用其他方法来实现任务?

它在Unity引擎中的工作方式可能与“一般使用C#”有所不同或不同?(IDK?)

请注意,在Unity中,它是否是线程会极大地影响您处理后续步骤的方式。因此是一个问题。


问题:我意识到关于“正在等待线程”的讨论很多,但是,(1)我从未在Unity设置中看到过讨论/回答过的内容(它有什么区别吗?IDK?)(2)我从来没有看到一个明确的答案!


1 一些辅助计算(例如,物理等)是在其他线程上完成的,但是实际的“基于框架的游戏引擎”是一个纯线程。(无论如何都无法“访问”主机框架线程:例如,在对本机插件进行编程或在另一个线程上进行某种计算时,您只需在引擎框架线程上留下组件的标记和值即可查看和在每帧播放时使用。)

胖子

我不喜欢回答自己的问题,但事实证明,这里没有一个答案是完全正确的。(但是,这里的许多/所有答案在不同方面都非常有用)。

实际上,可以简单地说出实际答案:

在等待控制后,在哪个线程上恢复执行SynchronizationContext.Current

而已。

因此,在任何特定版本的Unity中(请注意,截至2019年撰写时,他们正在彻底改变Unity- https://unity.com/dots)-或实际上是任何C#/。Net环境-此页面上的问题可以正确回答。

完整的信息出现在此后续质量检查中:

https://stackoverflow.com/a/55614146/294884

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在Unity C#中使一个对象从另一个对象中消失

来自分类Dev

从Unity C#中的另一个脚本向列表添加数据

来自分类Dev

如何在Unity C#脚本中引用另一个项目

来自分类Dev

Unity C#,如何从另一个脚本调用函数以启动动画?

来自分类Dev

将浮点数添加到另一个脚本,c# unity

来自分类Dev

从 C#/.NET MVC 应用程序中的另一个类调用函数

来自分类Dev

Unity / C#:在另一个函数完成执行后如何执行一个函数?

来自分类Dev

输入碰撞后将一个gameObject移到另一个对象。Unity C#

来自分类Dev

由另一个线程修改的C#.NET 5.0 Wpf UI

来自分类Dev

是否可以使着色器在Unity中扩展另一个着色器

来自分类Dev

是否可以使着色器在Unity中扩展另一个着色器

来自分类Dev

如何在c#Unity中从另一个脚本扩展类

来自分类Dev

如何从C#中的另一个线程在主线程中设置变量?

来自分类Dev

如何从C#中的另一个线程在主线程中设置变量?

来自分类Dev

使用Unity5和C#从输入字段获取字符串并在另一个场景中显示字符串

来自分类Dev

是否可以在另一个.NET应用程序中抓取GridView控件的内容?

来自分类Dev

查找一个浮点数是否是.NET中另一个浮点数的倍数

来自分类Dev

通知线程停止-在另一个线程和类中引发事件-C#

来自分类Dev

如何从另一个C#脚本Unity3d访问枚举和变量

来自分类Dev

如何从另一个C#脚本Unity3d访问枚举和变量

来自分类Dev

Unity/C# - 基于另一个对象手动设置对象的位置和旋转

来自分类Dev

如何从C#中的另一个项目调用或启动asp.net Web服务(asmx)

来自分类Dev

C#/ WPF从另一个类中创建的另一个线程更新UI

来自分类Dev

从另一个线程中的事件开始的Form.show()

来自分类Dev

我是否需要担心在Unity / C#中内联?

来自分类Dev

是否建议在iOS中的另一个后台线程中启动后台线程

来自分类Dev

将场景中的布尔值保存到Unity中的另一个场景

来自分类Dev

检查主线程是否仍在另一个线程中

来自分类Dev

从Unity中的另一个名称空间访问公共方法

Related 相关文章

  1. 1

    在Unity C#中使一个对象从另一个对象中消失

  2. 2

    从Unity C#中的另一个脚本向列表添加数据

  3. 3

    如何在Unity C#脚本中引用另一个项目

  4. 4

    Unity C#,如何从另一个脚本调用函数以启动动画?

  5. 5

    将浮点数添加到另一个脚本,c# unity

  6. 6

    从 C#/.NET MVC 应用程序中的另一个类调用函数

  7. 7

    Unity / C#:在另一个函数完成执行后如何执行一个函数?

  8. 8

    输入碰撞后将一个gameObject移到另一个对象。Unity C#

  9. 9

    由另一个线程修改的C#.NET 5.0 Wpf UI

  10. 10

    是否可以使着色器在Unity中扩展另一个着色器

  11. 11

    是否可以使着色器在Unity中扩展另一个着色器

  12. 12

    如何在c#Unity中从另一个脚本扩展类

  13. 13

    如何从C#中的另一个线程在主线程中设置变量?

  14. 14

    如何从C#中的另一个线程在主线程中设置变量?

  15. 15

    使用Unity5和C#从输入字段获取字符串并在另一个场景中显示字符串

  16. 16

    是否可以在另一个.NET应用程序中抓取GridView控件的内容?

  17. 17

    查找一个浮点数是否是.NET中另一个浮点数的倍数

  18. 18

    通知线程停止-在另一个线程和类中引发事件-C#

  19. 19

    如何从另一个C#脚本Unity3d访问枚举和变量

  20. 20

    如何从另一个C#脚本Unity3d访问枚举和变量

  21. 21

    Unity/C# - 基于另一个对象手动设置对象的位置和旋转

  22. 22

    如何从C#中的另一个项目调用或启动asp.net Web服务(asmx)

  23. 23

    C#/ WPF从另一个类中创建的另一个线程更新UI

  24. 24

    从另一个线程中的事件开始的Form.show()

  25. 25

    我是否需要担心在Unity / C#中内联?

  26. 26

    是否建议在iOS中的另一个后台线程中启动后台线程

  27. 27

    将场景中的布尔值保存到Unity中的另一个场景

  28. 28

    检查主线程是否仍在另一个线程中

  29. 29

    从Unity中的另一个名称空间访问公共方法

热门标签

归档