await выбрасывает из функции и ставит ее в конец очереди
private void nOLIMITToolStripMenuItem_Click(object sender, EventArgs e)
{
Account.rows = 34;
a.RequestFile(client, 6);
objectListView1.SetObjects(acc.InitializeAccs());
}
В моей голове должны по очереди выполняться функции RequestFile и SetObjects, но когда дело доходит до await,
async public void RequestFile(TelegramClient client, int button_number)
{
await client.SendMessageAsync(peer, "Menu");
var po = GetHistory(client);
int msg_id = GetMessageId(po);
//...
}
программа выходит из функции, выполняет функцию SetObjects, и только потом продолжает выполнение RequestFile
Если же await убрать, функция перестает корректно работать.
Ответы (1 шт):
Автор решения: aepot
→ Ссылка
Вы не ожидаете асинхронную операцию RequestFile с помощью await, вы ее выполняете в режиме "запустил и забыл", и вы не можете ее ожидать, потому что она async void.
Чтобы можно было ожидать, операция должна быть async Task, верная реализация может выглядеть вот так:
private async void nOLIMITToolStripMenuItem_Click(object sender, EventArgs e)
{
Account.rows = 34;
await a.RequestFile(client, 6);
objectListView1.SetObjects(acc.InitializeAccs());
}
public async Task RequestFile(TelegramClient client, int button_number)
{
await client.SendMessageAsync(peer, "Menu");
var po = GetHistory(client);
int msg_id = GetMessageId(po);
//...
}