Этот код проверяет 2 клиента, подключенных к сокету, для которого один нажимает кнопку сначала, соединение и прием работают нормально, но если я нажму кнопку клиента, которая является второй в словаре deelnemersTimer и клиентов, Не делай ничего, он просто будет ждать, пока я не нажму первый в словаре. Я почти уверен, что это ожидание в foreach, это неправильно, но что мне нужно изменить, чтобы заставить это работать правильно?foreach with await method
клиентов - это словарь с именами клиентов и их сокетом. deelnemersTimers - это словарь с именами клиентов и временем, когда они нажали кнопку. Также deelnemer является голландским участником.
foreach (Deelnemer deelnemer in deelnemers)
{
deelnemersTimer[deelnemer.DeelnemerVoornaam + " " + deelnemer.DeelnemerNaam] = await CheckButtons(clients[deelnemer.DeelnemerVoornaam + " " + deelnemer.DeelnemerNaam]);
}
deelnemersTimer.Values.Min();
var eerste = deelnemersTimer.Where(p => p.Value == deelnemersTimer.Values.Min()).Select(p => p.Key).FirstOrDefault();
private async Task<long> CheckButtons(StreamSocket socket)
{
DataReader reader = new DataReader(socket.InputStream);
var actualStringLength = await reader.LoadAsync(1);
long time = stopwatch.ElapsedMilliseconds;
return time;
}
Не могли бы вы подробно описать, что должен делать код? Должен ли результат быть возвращен, как только первый участник нажмет кнопку? Что должно произойти с сокетами других участников? – svick
Когда участники нажимают кнопку, контрольные кнопки возвращают прошедшее время, на этот раз заполняется DeelnemersTimer, и он проверяет, какой из них был первым. Проблема в том, что, когда второй клиент нажимает сначала, foreach все еще ждет первого щелчка, а затем, когда я нажимаю на первый, время по какой-то причине перепутано. – maarten1055