В настоящее время я работаю над системой, которая активно отслеживает информацию о серверах. Для некоторых методов мне нужно, чтобы они были асинхронными, однако есть несколько, которые реализованы синхронным образом (внешняя библиотека). У меня есть этот код:
m_ServerQuery = HServerQuery.Invalid;
m_PingResponse = new ISteamMatchmakingPingResponse(OnServerResponded, OnServerFailedToRespond);
try
{
m_ServerQuery = SteamMatchmakingServers.PingServer((uint)ip, port, m_PingResponse);
await Task.Delay(500);
SteamMatchmakingServers.CancelServerQuery(m_ServerQuery);
}
catch
{
Console.WriteLine($"*** Something went wrong while pinging server ***");
}
Как вы можете видеть из фрагмента кода выше, класс PingResponse наследует два метода, которые работают как «обратный вызов», когда ответ отправляется из Steam. Теперь ожидание 0,5 миллисекунды работает, однако я думаю, что было бы лучше реализовать его, чтобы дождаться срабатывания одного из этих двух методов: OnServerResponded, OnServerFailedToRespond
Как я смогу достичь этого? Определение ISteamMatchmakingPingResponse
:
public class ISteamMatchmakingPingResponse
{
public ISteamMatchmakingPingResponse(ServerResponded onServerResponded, ServerFailedToRespond onServerFailedToRespond);
~ISteamMatchmakingPingResponse();
public static explicit operator IntPtr(ISteamMatchmakingPingResponse that);
public delegate void ServerResponded(gameserveritem_t server);
public delegate void ServerFailedToRespond();
}