2015-09-22 9 views
-1

Я в настоящее время развивается в WPF/MVVM после DataService узор, где ViewModel вызов Service, который содержит все бизнес-объекты и метод.MVVM - ViewModel и DataService, где должна располагаться задача?

Теперь, когда я вызываю метод службы, для этого требуется немного времени, поэтому я должен создать новую задачу, чтобы графический интерфейс не был заморожен.

На ваш взгляд, где наилучшее место для запуска задачи, в ViewModel или в самой службе?

... 
// TaskFactory.StartNew(() => {}); // where I should put this ? * 
... 

class DataService 
{ 
    MyBussObj mbo; 

    CallBusinessOperation() 
    { 
     // * here ? 
     while (mbo.Next()) 
     { 
      // requires a while 
     } 
    } 
} 

class MyViewModel 
{ 
    DataService service = new DataService(); 

    void DoIt() 
    { 
     // * here ? 
     service.CallBusinessOperation(); 
    } 
} 
+0

IMO вам следует использовать методы обслуживания async и называть их с ожиданием – netaholic

+0

@netaholic Почему? – Gusdor

+0

, потому что это более прозрачно и прозрачно, чем просто использовать задачи – netaholic

ответ

0

Я хотел бы сделать это в ViewModel, потому что, чем вы можете легко обновить свои свойства на ProgressChanged или что-нибудь еще вы хотите.

+0

Да, но я могу сделать это и в dataservice, потому что он может нажимать viewmodel для любого уведомления. –

1

Я бы создал и начал задачу в модели представления.

Теоретически вы можете запустить 3 разных задачи в своей модели просмотра и обновить интерфейс только после того, как все или первое из них будет завершено. В этом случае модель представления отвечает за управляющий поток.

Если сама реализация метода обслуживания имеет логику управления, которая должна получить доступ к нескольким другим службам async, я бы начал там выполнять соответствующие задачи.

Подводя итог, я бы начал задачи, в которых находится логика управления.

+0

Спасибо! У меня недостаточно репутации, чтобы проголосовать за ваш ответ, но он повысится, как только я –

 Смежные вопросы

  • Нет связанных вопросов^_^