按顺序运行后台工作程序的C#最佳实践?

时间:2016-10-31 12:37:54

标签: c# backgroundworker

我有UI,我想保持响应 - 我有两个程序,我想运行异步。

有两种情况:

  1. 我只是致电Proc A
  2. 我打电话给Proc A,然后当它完成时,调用proc B。
  3. 目前我保留一个布尔值('procAWorking'),当我启动worker A时,我设置为'true',当调用Proc A的RunWorkerCompleted事件时,我设置为'false'。

    对于方案1,没问题。 对于方案2,我从方法中调用Proc A,然后使用'while'循环等待Proc A表明它已完成。

    这是一种合适的方法吗?是否有更好的理解做法?

    ...
    ProcA(); // method creates BW and calls RunWorkerAsync()
    
    while(procAWorking)
    {
        Thread.Sleep(1000);
    }
    
    ProcB(); // method creates different BW and calls RunWorkerAsync()
    

2 个答案:

答案 0 :(得分:1)

如果使用async / await,实际上很容易做到你想做的事。

你需要procA和procB都是异步方法:

async Task ProcA()
{
    //ProcA work here, delay to simulate work
    await Task.Delay(1000);
}

async Task ProcB()
{
    //ProcB work here, delay to simulate work
    await Task.Delay(1000);
}

然后你就可以这样称呼它:

async Task DoStuff()
{
    await ProcA();
    await ProcB();
}

答案 1 :(得分:0)

如果您已经为false处理程序设置了RunWorkerCompleted的标记,那么为什么不在那时开始第二次后台处理。

因此,只需从您的代码中调用ProcA,然后从第一个后台工作人员的ProcB调用RunWorkerCompleted ...