我有三个BackgroundWorkers,每个查询数据库的db。我想知道如何检查所有三个BackgroundWorkers是否已完成他们的工作,以便我可以执行一些逻辑?
这是我到目前为止所做的,但它标志着一个错误说 - 'await'运算符只能在异步方法中使用。考虑使用'async'修饰符标记此方法并将其返回类型更改为'Task'。
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
}
答案 0 :(得分:2)
再看一下你的错误:
等待'运算符只能在异步方法中使用。考虑使用' async'标记此方法。修饰符并将其返回类型更改为'任务'。
然后执行错误消息要执行的操作:
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
后缀,因此它跟在TAP guidelines之后。
答案 1 :(得分:0)
您可以使用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*/
}