在我们的应用程序中,每当我们想要进行服务调用时,我们都会使用TPL来创建任务。我们有一个忙碌指示器,只要任务启动并在任务完成或出现故障时清除,它就会设置为true。以通用方式完成此任务的任何方式,而不是为每个创建的任务执行此操作?
第一个例子:
ComponentViewModel.Instance.IsApplicationBusy = true;
ComponentViewModel.Instance.BusyMessage = "Loading...";
var task1 = Task.Factory.StartNew(() => DoTask1());
task1.ContinueWith(antecdent =>
{
ComponentViewModel.Instance.IsApplicationBusy = false;
CustomAction1();
}
第二个例子:
ComponentViewModel.Instance.IsApplicationBusy = true;
ComponentViewModel.Instance.BusyMessage = "Loading...";
var task2 = Task.Factory.StartNew(() => DoTask2());
task2.ContinueWith(antecdent =>
{
ComponentViewModel.Instance.IsApplicationBusy = false;
CustomAction2();
}
同样的是,每当进行服务调用时,整个应用程序都会重复逻辑,是否有任何方法可以避免这种重复?
例如,有一个dragstarted和dragcompleted事件会被所有拖动操作触发,因此可以通过扩展任务工厂或其他方式来启动taskstarted和taskcompleted事件吗?
编辑:进行更改以使问题更加清晰。您现在可以在开始和结束任务之前观察到相同的步骤,但是当每个任务运行完成时需要执行不同的功能
答案 0 :(得分:0)
public void DoIt(Action ThingToDo) {
ComponentViewModel.Instance.IsApplicationBusy = true;
ComponentViewModel.Instance.BusyMessage = "Loading...";
var loadProviderTask = Task.Factory.StartNew(ThingToDo);
loadProviderTask.ContinueWith(antecdent =>
{
ComponentViewModel.Instance.IsApplicationBusy = false;
}
}