Я занимаюсь разработкой системы, которая включает чтение сообщений с какого-либо сервера, регистрацию обработчиков событий и их вызов по очереди.
Я использую .NET 3.5, поэтому учтите, что решение из .NET 4 или async недоступно.
Код похож на этот (для краткости удалены некоторые фрагменты):
// Loop until receiving timeout.
while (!timedOut)
{
if ((message = connection.Receive) != null)
{
if (message.Id == Error.MessageId)
{
throw new Exception("Something wrong happened!!");
}
// This calls the event handler (if registered).
HandleEvent(message);
if (finishedEvents)
{
// Finished.
}
else
{
// If message matches the requested message.
if (message.Id == expectedEvents[index].MessageId)
{
index++;
}
// Finished processing all messages.
if (index == expectedEvents.Length)
{
finishedEvents = true;
continue;
}
}
else
{
break;
}
}
В настоящее время у меня есть синхронная (блокирующая) реализация, где у меня есть цикл, который читает сообщения и запускает правильный обработчик.
Таким образом, я могу легко проверить, что события запускаются в порядке.
Я хотел бы переключиться на асинхронную реализацию, где события будут запускаться асинхронно, а не читать их в цикле.
Как я могу проверить в этой реализации, что события получены в порядке? Есть ли стандартное решение этой проблемы?