我怎么知道任务是否完成

时间:2018-06-07 19:54:35

标签: c# async-await

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

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

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

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

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

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

如何将其更改为可以检查完成的Task对象?

1 个答案:

答案 0 :(得分:4)

你几乎不应该有一个带有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