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