Я хотел бы попросить вас объяснить мне, как работает система исключений, в следующем фрагменте кода:
static void Main(string[] args)
{
try
{
//Code which throws exceptions from time to time and runs in a loop
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
Console.ReadKey();
}
Я заметил кое-что, что меня удивило.Когда выдается исключение, код внутри блока try {...} все еще выполняется и может выдать еще больше исключений, которые будут напечатаны в окне консоли.Разве код внутри цикла не должен завершить свое выполнение и в конце «перейти» к Console.ReadKey ()?
@ EDIT:
Код внутри сложен, и для его выполнения потребуетсянесколько страниц.Я могу вам сказать, что я выполняю несколько асинхронных операций внутри, например, скачивая файлы, получая пакеты и т. Д. Другими словами, существуют другие потоки, которые создаются в цикле.
@ EDIT2: Предположительно, этот код отвечаетповедение:
public SomeConstructor(Socket server)
{
_pb = new PacketBuilder(server, c);
SocketWrapper sw = new SocketWrapper(server, Globals.recvBufferSize);
sw.Socket.BeginReceive(sw.Buffer, 0, Globals.recvBufferSize, SocketFlags.None,PacketReceiveCallback, sw);
_pi = new PacketInterpreter(this, c);
}
private void PacketReceiveCallback(IAsyncResult iar)
{
SocketWrapper sw = iar.AsyncState as SocketWrapper;
int bytesReceived = sw.Socket.EndReceive(iar);
_pi.Interpret(sw.Buffer, 0, bytesReceived);
if (bytesReceived > 0)
sw.Socket.BeginReceive(sw.Buffer, 0, Globals.recvBufferSize, SocketFlags.None, PacketReceiveCallback, sw);
}