围绕 TPL 创建的新任务集中操作前后
本文关键字:操作 集中 新任务 TPL 创建 围绕 | 更新日期: 2023-09-27 18:33:15
在我们的应用程序中,每当我们想要进行服务调用时,我们都使用 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();
}
同样,每当进行服务调用时,逻辑都会在整个应用程序中重复,有什么方法可以避免这种重复吗?
例如,有一个拖动启动和拖动完成事件,它们为所有拖动操作触发,因此可以通过扩展任务工厂或其他方式来启动任务启动和任务完成事件?
编辑 :进行了更改,使问题更加清晰。现在,您可以观察到开始和结束任务之前的步骤是相同的,但是当任务运行时需要为每个任务执行不同的函数
编辑:看来我误解了这个问题。 创建这个"开始,等待,继续"作为一个集中式功能是一个很好的举措,可以像这样创建:
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;
}
}