В принципе, я хочу сделать несколько асинхронных запросов на сервере tcp. В настоящее время у меня есть рабочий клиент, который только синхронно и блокирует пользовательский интерфейс при каждом сетевом вызове. Так как множество запросов может произойти почти в то же самое время, я пытался сделать это:Асинхронный замок не разрешен
private object readonly readLock = new object();
public async Task UpdateDetailsAsync()
{
//I want every request to wait their turn before requesting (using the connection)
//to prevent a read call from catching any data from another request
lock (readLock)
{
Details details = await connection.GetDetailsAsync();
detailsListBox.Items = details;
}
}
Я уверен, что это не хорошо использовать замок, но это единственный способ, которым я могу думать о том, что могли бы сделать звонки ждать за свою очередь. Есть ли объект, который я могу использовать для достижения такого поведения? Я думал, что монитор будет таким же, поэтому я не пробовал (я понимаю, что это многопоточность, но это все, что мне знакомо ...)
Можете ли вы поделиться тем, как вы определяете 'readLock'? Возможно, в неправильном контексте блокировки? – code4life
Я обновил код, включив в него элемент readLock, но это не проблема. 'await' вообще не может использоваться в методе async, не будет компилироваться. –
Одним из способов сделать это было бы превращение ваших вызовов в очередь. блокировка добавления действий в очередь, а не самих операций. завершите очередь в фоновом режиме. –