Прошу комментарий к Await / Async
Всем примет. Прошу совета, верно ли делаю относительно своих комментариев. И возможные исправления в по части последовательности выполнения кода.
{
var history = await _historyService.GetHistory(_id); // ---- Долгая, но данные нужны уже тут, потому просто жду.
var resultTask = _httpService.RunWithHistoryAsync(history, (int)_id); //---- Долгая, Выполняю в фоне.
SendStopButton(_id);
SetActivity(_id);
var historyTask = _historyService.GetHistory(_id); - история изменилась, но данные нужны позже, выполняю в фоне.
while (!resultTask.IsCompleted) //---- Нужно, иначе перестает показывать прелоад ( что юзер пишет в чат). Он настроен на 3сек, код выплоняеться дольше.
{
await Task.Delay(TimeSpan.FromSeconds(0.5));
SetActivity(_id); //---- сам прелоад
}
var result = await resultTask; //---- не жду в методе SendMessage, тк необходимо максимально сократить время между удалением и новым сообщением. Иначе может выйти так, что historyTask готов и удаление сработает, а result еще не готов и между этими методами пройдет вечность.
MessageDelite(_id, await historyTask); //---- Удаляю последнее сообщение
SendMessage(_id, result); //---- максимально быстро отправляю после удаления
return;
};
- например
Task<List<MessageInfo>> historyTask = Task.Run(() => _historyService.GetHistory(_id));
и потом ожидание, равносильноvar historyTask = _historyService.GetHistory(_id);
и потом ожидание - Что-то можно улучшить? Я понимаю, что код короткий, но не уверен что делаю лучшим образом эту часть, тк учусь. Спасибо
Источник: Stack Overflow на русском