C# 如何检查多个后台工作人员是否已完成任务

C# 如何检查多个后台工作人员是否已完成任务,c#,multithreading,C#,Multithreading,我有三个后台工作人员,每个人都查询数据库中的数据。我想知道如何检查三个后台工作人员是否都完成了他们的工作,以便我可以执行一些逻辑 这是我到目前为止所做的,但它标记了一个错误- “await”运算符只能在异步方法中使用。考虑用“AsiNC”修饰符标记该方法,并将其返回类型改为“任务”。 public void WaitForThreadsToComplete(Object _Item) { var results = await Task.WhenAll( Task.Ru

我有三个后台工作人员,每个人都查询数据库中的数据。我想知道如何检查三个后台工作人员是否都完成了他们的工作,以便我可以执行一些逻辑

这是我到目前为止所做的,但它标记了一个错误- “await”运算符只能在异步方法中使用。考虑用“AsiNC”修饰符标记该方法,并将其返回类型改为“任务”。

public void WaitForThreadsToComplete(Object _Item) 
{
    var results = await Task.WhenAll(
        Task.Run(() => InitiateBackgroundProcessElements(_Item.Id)),
        Task.Run(() => InitiateBackgroundProcessCompulsoryField(_Item.Id)),
        Task.Run(() => InitiateBackgroundProcessFieldRange(_Item.Id)));

    // my logic here
}

您可以使用
RunWorkerCompleted
事件来标识此项

试试这个:

BackgroundWorker bg1 = new BackgroundWorker();      
bg1.DoWork+=bg1_DoWork;    
bg1.RunWorkerAsync();  //start the worker
bg1.RunWorkerCompleted+=bg1_RunWorkerCompleted;


private void bg1_DoWork(object sender, DoWorkEventArgs e)
{
    /*Worker started - do something*/
}
private void bg1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
    /*worker ended - do something*/
}

再看看你的错误:

“await”运算符只能在异步方法中使用。考虑用“AsiNC”修饰符标记该方法,并将其返回类型改为“任务”。

public void WaitForThreadsToComplete(Object _Item) 
{
    var results = await Task.WhenAll(
        Task.Run(() => InitiateBackgroundProcessElements(_Item.Id)),
        Task.Run(() => InitiateBackgroundProcessCompulsoryField(_Item.Id)),
        Task.Run(() => InitiateBackgroundProcessFieldRange(_Item.Id)));

    // my logic here
}
然后执行错误消息所述的操作:

public async Task WaitForThreadsToCompleteAsync(Object _Item) 
{
  var results = await Task.WhenAll(
    Task.Run(() => InitiateBackgroundProcessElements(_Item.Id)),
    Task.Run(() => InitiateBackgroundProcessCompulsoryField(_Item.Id)),
    Task.Run(() => InitiateBackgroundProcessFieldRange(_Item.Id)));

  // my logic here
}

我还为方法名称添加了一个
Async
后缀,因此它遵循了。

如何创建
后台工作人员
?您可以分享您的代码吗?为什么您需要将任务和
BackgroundWorker
混合使用<基于代码>任务的API和异步/等待过时。检查并确认。您还必须对其应用
DoWork