2013-06-26 3 views
1

Не могли бы вы дать больше объяснений многопоточности MvvmCross?Многопоточные устройства MvvmCross

ViewModel призывает к просмотрам safe, поэтому конфликтов не должно быть.

Однако IMvxMessanger имеет SubscribeOnThreadPoolThread а также SubscribeOnMainThread (за исключением только Subscribe), которые на самом деле не ясно для меня, когда использовать их.

Кроме того, что такое многопоточность внутри ViewModel (например, если два веб-запроса активируются одновременно, и по их результатам каждый из них пытается получить доступ к моей службе данных (например, запись данных в базу данных))?

(Или есть другие подобные ситуации, которые вы знаете из своего опыта).

Спасибо!

ответ

1

Для одного технического вопроса о различиях между подписавшимися методами на мессенджере, они описаны в комментариях XML на интерфейсе (но также в значительной степени сам за себя так или иначе)

  • подписаться на основном потоке - сообщения будут приниматься на основной поток
  • подписываться на нити пула потоков - сообщения будут приниматься на поток пула потоков
  • не подписываются - сообщения будут приниматься, не допущения должны быть сделаны о том, какой поток

Xml комментарии в - https://github.com/slodge/MvvmCross/blob/v3/Plugins/Cirrious/Messenger/Cirrious.MvvmCross.Plugins.Messenger/IMvxMessenger.cs#L15


Для остальной части вопроса: как разработчик приложения, вы можете использовать многопоточность и асинхра в коде - и нормаль # и .net многопоточных объектов являются там для вас (или их переносного подмножества) - синхронизация доступа к ресурсу - это просто нормальное решение и техника развития.

+0

Спасибо за ответ. И я понял общее значение для «Subscribe» -семейных методов сообщения, но я до сих пор не полностью понимаю, что является целью последнего: «подписаться - будут получены сообщения, не предполагается никаких предположений о том, какие нить". В каких ситуациях я не должен заботиться о том, какие потоки являются полученными сообщениями? Почему третий этот метод (поскольку два других уже существуют)? – Agat

+1

Mvx не принуждает вас к необходимости «must» или «must not» - вы можете свободно выбирать, как/где/если синхронизировать многопоточный код. – Stuart

+1

Ну, это не было «обязательно» в значении «обязательно». Конечно, это означало «должен». Я человек, поэтому никто не должен заставить себя делать то, чего я действительно не хочу, но я действительно хочу понять, когда я ** должен использовать третий упомянутый метод вместо двух других. – Agat