我怎么知道任务是否已完成



我有一个网格,当选择一行时加载大量信息 - 还需要加载 7 个网格和一个 DevExpress 报告,这需要花费大量时间

我将所有方法放入任务中以加快该过程。

但是,如果在前一行完成加载之前选择了另一行,则会导致错误。

我想知道如何检查任务是否已完成,并在再次加载新数据之前等待或取消任务。(我是异步编程的新手(

这是我的任务的一个例子(其中有 8 个,每个一个接一个地调用(:

private async void LoadSSNs()
{
await Task.Run(() => grdSSNs.DataSource = ICTBLL.GetData(ID));
}

如何将其更改为可以检查是否完成的任务对象?

你几乎不应该有一个带有 async/await 的void返回类型(也有例外,但从这个开始(。 您的方法需要返回一个Task以便您有等待或检查完成状态的内容。

private async Task LoadSSNs()
{
await Task.Run(() => grdSSNs.DataSource = ICTBLL.GetData(ID));
}

如何确定任务是否完成取决于您需要执行的操作。 如果需要在任务异步运行时执行一些工作,可以执行以下操作:

var t = LoadSSNs();
// do something while task is running.
t.Wait(); // this is one option.
if (t.Status == TaskStatus.Faulted) { } // handle problems from task.

如果在任务完成时还有更多工作要做,可以执行以下操作:

while(!t.IsCompleted)
{
// do some other work.
}

同样,如何处理任务取决于您;重要的部分是您需要从异步方法返回可等待的Task

最新更新