как я могу узнать, если задача выполнена - PullRequest
0 голосов
/ 07 июня 2018

У меня есть сетка, которая загружает много информации, когда выбрана строка - нужно загрузить еще 7 сеток и отчет DevExpress, и это занимает много времени

Я положил все методы в задачи, чтобыускорить процесс.

Но если другая строка выбирается до того, как предыдущая заканчивает загрузку, это вызывает ошибки.

Я хотел бы знать, как проверить, завершена ли задача, и либо дождаться, либо отменить задачуперед загрузкой снова с новыми данными.(Я новичок в асинхронном программировании)

Это пример моих задач (их 8, каждый вызывается один за другим):

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

Как я могу изменить его наобъект задачи, который я могу проверить, если завершен?

1 Ответ

0 голосов
/ 07 июня 2018

Вы почти никогда не должны иметь тип возврата void с async / await (есть исключения, но начните с этого).Ваш метод должен вернуть 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 из вашего асинхронного метода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...