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);
    //...
}
→ Ссылка