C# Xamarin-Java.Lang.Thread与System.Threading.Thread-使用哪一个?

C# Xamarin-Java.Lang.Thread与System.Threading.Thread-使用哪一个?,c#,android,multithreading,xamarin,xamarin.android,C#,Android,Multithreading,Xamarin,Xamarin.android,在我最近参与的一个Xamarin项目中,我可以看到开发人员使用了Java.Lang.Thread以及System.Threading.Thread(用于非常类似的操作,例如在后台加载数据) 我只是想知道在Xamarin项目中使用Java.Lang.Thread背后的原因是什么,其中Thread类继承自IDisposable,因此只有确保正确地处理它才有意义(这意味着它是一个额外的代码) 在Xamarin生态系统中,什么表现更好? 它们基本上是可互换的吗?我只想提一下,System.Threadi

在我最近参与的一个Xamarin项目中,我可以看到开发人员使用了Java.Lang.Thread以及System.Threading.Thread(用于非常类似的操作,例如在后台加载数据)

我只是想知道在Xamarin项目中使用Java.Lang.Thread背后的原因是什么,其中Thread类继承自IDisposable,因此只有确保正确地处理它才有意义(这意味着它是一个额外的代码)

在Xamarin生态系统中,什么表现更好?

它们基本上是可互换的吗?

我只想提一下,
System.Threading.Thread
源于,这是标准的安全实现:

确保派生类中的所有终结代码都标记为关键代码

而不是
Java.Lang.Thread
只实现
IDisposable
接口

这些类之间的另一个区别是它们的定义略有不同。让我们看看文档:

Java.Lang.Thread类

线程
是一个并发执行单元。对于被调用的方法、它们的参数和局部变量,它有自己的调用堆栈。每个应用程序在启动时至少有一个线程在运行,即主线程中的主线程。运行时在系统线程组中保留自己的线程

链接文章说线程组的使用被认为是过时的

System.Threading.Thread类

进程可以创建一个或多个线程来执行与该进程关联的部分程序代码。使用委托或委托指定线程执行的程序代码。委托允许您将数据传递给线程过程

它还源自:

将线程类公开给非托管代码

此接口用于从非托管代码访问托管类,不应从托管代码调用

因此,正如我所看到的,JavaOne线程是JVM内部的逻辑结构,而不是c#-one是非托管的。我建议您衡量一个实现和另一个实现的资源,并相应地决定使用哪个类


如果您的许多代码都基于.NET端,我建议使用CLR实现。在另一种情况下,我认为应该使用JVM实现。

我不理解否决票。如果你投反对票,你应该能够解释。我不是Xamarin的专家,但我认为他们应该是一样的,因为C代码最终被翻译成Java。@Sweeper这是一个错误的陈述,C(或F#,…)代码没有被翻译成Java,它是基于IL的,在Mono运行时运行,Mono运行时封装在基于Android NDK的应用程序中。Java ART虚拟机通过网桥提供,因此您可以访问Android Java SDK。@抱歉!我对Xamarin了解不多@Sweepper NP,只是不希望有人认为某种类型的反编译正在进行。使用
Xamarin.Android
堆栈,确实有两个虚拟机可用,.Net/Mono/CIL和Java/Dalvik/ART。。。基于.Net的代码可以调用Android的Java端,并尽可能透明地使用这些功能。。。