1

在我们的应用程序中,每当我们想要进行服务调用时,我们都会使用 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 事件吗?

编辑:进行了更改以使问题更加清晰。您现在可以观察到开始和结束任务之前的步骤是相同的​​,但是当每个任务运行完成时需要为每个任务执行不同的功能

4

1 回答 1

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;
    }
}
于 2012-05-06T02:37:45.757 回答