我目前正在WPF/MVVM中开发dataservice模式,其中ViewModel调用包含所有业务对象和方法的服务。
现在,当我调用service方法时,这需要一点时间,所以我应该创建一个新的Task,以使GUI不冻结。
在你看来,在哪里是最好的位置开始一个任务,在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();
}
}
我将在视图模型中创建并启动任务。
理论上,你可以在视图模型中启动3个不同的任务,只有当所有或第一个任务完成时才更新UI。在这种情况下,视图模型负责控制流。
如果服务方法实现本身具有需要异步访问其他几个服务的控制逻辑,我将在那里启动各自的任务。
总而言之,我将从控制逻辑所在的任务开始。
我会在ViewModel中这样做,因为这样您就可以轻松刷新ProgressChanged或其他任何您想要的属性。