Multithreading MvvmCross多线程系统

Multithreading MvvmCross多线程系统,multithreading,xamarin,mvvmcross,multiplatform,Multithreading,Xamarin,Mvvmcross,Multiplatform,你能解释一下MvvmCross多线程吗 对视图的ViewModel调用是无效的,因此必须没有任何冲突 然而,IMvxMessanger有SubscribeOnThreadPoolThread和SubscribeOnMainThread(除了Subscribe),我并不清楚何时使用它们 另外,ViewModel内部的多线程(例如,如果两个web请求同时被激活,并且在它们的结果上,每个请求都试图访问我的数据服务(例如,将数据写入数据库)),又是什么呢 (或者,从你的经历中,你知道还有其他一些这样的特

你能解释一下MvvmCross多线程吗

对视图的ViewModel调用是无效的,因此必须没有任何冲突

然而,IMvxMessanger有SubscribeOnThreadPoolThread和SubscribeOnMainThread(除了Subscribe),我并不清楚何时使用它们

另外,ViewModel内部的多线程(例如,如果两个web请求同时被激活,并且在它们的结果上,每个请求都试图访问我的数据服务(例如,将数据写入数据库)),又是什么呢

(或者,从你的经历中,你知道还有其他一些这样的特殊情况)


谢谢大家!

对于关于messenger上订阅方法之间差异的单个技术问题,这些问题在接口上的XML注释中进行了解释(但基本上也是不言自明的)

  • 在主线程上订阅-消息将在主线程上接收
  • 在线程池线程上订阅-将在线程池线程上接收消息
  • 订阅-将接收消息,不应假设是哪个线程
Xml注释位于-



对于问题的其余部分:作为一名应用程序开发人员,您可以在代码中自由使用线程和异步,并且可以使用普通的c#和.net多线程对象(或它们的可移植子集)-同步访问资源只是一项正常的开发决策和技术。

对于有关messenger上订阅方法之间差异的单个技术问题,这些问题在界面上的XML注释中进行了解释(但基本上也是不言自明的)

  • 在主线程上订阅-消息将在主线程上接收
  • 在线程池线程上订阅-将在线程池线程上接收消息
  • 订阅-将接收消息,不应假设是哪个线程
Xml注释位于-



对于问题的其余部分:作为一名应用程序开发人员,您可以在代码中自由地使用线程和异步-并且可以使用普通的c#和.net多线程对象(或它们的可移植子集)-同步访问资源只是一项普通的开发决策和技术。

谢谢您的回答。我确实理解了消息的“Subscribe”家族方法的一般含义,但我仍然没有完全理解最后一个方法的目的:“Subscribe-消息将被接收,不应该对哪个线程进行任何假设”。在什么情况下我不必关心在哪个线程中接收消息?为什么第三种方法是这种方法(因为另外两种方法已经存在)?Mvx不会强制您执行任何“必须”或“不得”-您可以自由选择如何/在何处/是否同步多线程代码。这实际上不是“必须”中的“必须”意思。当然,这意味着“应该”。我是一个人,所以没有人会强迫自己去做我不想做的事情,但我真正想知道的是,我什么时候应该使用上面提到的第三种方法,而不是另外两种方法。@Agat-你会使用第三种方法,根据你应用程序的设计,在哪个线程上处理接收到的消息并不重要。通常情况下,这不会是任何涉及UI的内容。一个例子可能是向线程安全集合添加一个项-无论哪个线程添加该项,因此没有理由在主线程或单独的池线程上处理消息。谢谢您的回答。我确实理解了消息的“Subscribe”家族方法的一般含义,但我仍然没有完全理解最后一个方法的目的:“Subscribe-消息将被接收,不应该对哪个线程进行任何假设”。在什么情况下我不必关心在哪个线程中接收消息?为什么第三种方法是这种方法(因为另外两种方法已经存在)?Mvx不会强制您执行任何“必须”或“不得”-您可以自由选择如何/在何处/是否同步多线程代码。这实际上不是“必须”中的“必须”意思。当然,这意味着“应该”。我是一个人,所以没有人会强迫自己去做我不想做的事情,但我真正想知道的是,我什么时候应该使用上面提到的第三种方法,而不是另外两种方法。@Agat-你会使用第三种方法,根据你应用程序的设计,在哪个线程上处理接收到的消息并不重要。通常情况下,这不会是任何涉及UI的内容。一个例子可能是向线程安全集合添加一个项——无论哪个线程添加该项,因此没有理由在主线程或单独的池线程上处理消息。