Здравствуйте, nemoys, Вы писали:
N>многопоточное приложение — использует сокеты, ассинхронные методы , ThreadPool
N>работает на никсах последня версия mono
N>иногда выскакивает вот такой error
N> FATAL "Operation is not valid due to the current state of the object":^
N> at System.Collections.Queue.Dequeue () [0x00000] in <filename unknown>:0
N> at System.Net.Sockets.Socket+SocketAsyncResult.Complete () [0x00000] in <filename unknown>:0
N> at System.Net.Sockets.Socket+SocketAsyncResult.CompleteDisposed (System.Object unused) [0x00000] in <filename unknown>:0
N>вопрос — как заставить приложение работать после возникновения такой ошибки
А есть ли смысл продолжать работать? Что мешает исправить ошибку? Синхронизации при использовании System.Collections.Queue используете?
N> — у меня сразу падает вся программа несмотря на то что ошибка не в главном потоке
А почему не должна падать
Здравствуйте, _FRED_, Вы писали:
_FR>Здравствуйте, nemoys, Вы писали:
N>>многопоточное приложение — использует сокеты, ассинхронные методы , ThreadPool
N>>работает на никсах последня версия mono
N>>иногда выскакивает вот такой error
N>> FATAL "Operation is not valid due to the current state of the object":^
N>> at System.Collections.Queue.Dequeue () [0x00000] in <filename unknown>:0
N>> at System.Net.Sockets.Socket+SocketAsyncResult.Complete () [0x00000] in <filename unknown>:0
N>> at System.Net.Sockets.Socket+SocketAsyncResult.CompleteDisposed (System.Object unused) [0x00000] in <filename unknown>:0
N>>вопрос — как заставить приложение работать после возникновения такой ошибки
_FR>А есть ли смысл продолжать работать? Что мешает исправить ошибку? Синхронизации при использовании System.Collections.Queue используете?
N>> — у меня сразу падает вся программа несмотря на то что ошибка не в главном потоке
_FR>А почему не должна падать
Да — смысл продолжать работать есть. потоков много и падение одного мне не мешает
тем более если я получаю извещение о падении.
Насчет исправления ошибки — ошибка появляется очень редко и я никак не могу ее отловить — примерно раз в день при непрерывной работе — и форсировать немогу потому что не могу понимаю причину ее возникновения
вот отловил ее в необработанных и думаю что дальше делать — самое простое просто убивать поток и продолжать работать как ни в чем не бывало но немогу — прога падает.
System.Collections.Queue использую не я я класс сокетов
at System.Net.Sockets.Socket+SocketAsyncResult.Complete()
внутренний класс в System.Net.Sockets.Socket.
Здравствуйте, nemoys, Вы писали:
N>>>вопрос — как заставить приложение работать после возникновения такой ошибки
_FR>>А есть ли смысл продолжать работать? Что мешает исправить ошибку? Синхронизации при использовании System.Collections.Queue используете?
N>>> — у меня сразу падает вся программа несмотря на то что ошибка не в главном потоке
_FR>>А почему не должна падать
N>Да — смысл продолжать работать есть. потоков много и падение одного мне не мешает
Откуда вы знаете, что не мешает? Вы используете некий объект (очередь) из разных потоков и так уж вышло, что объект у вас оказался в несогласованном состоянии. Откуда у вас гарантии, что можно продолжать работать с этим объектом?
N>тем более если я получаю извещение о падении.
Что за "извещение о падении" вы получаете или хотели бы получить
N>Насчет исправления ошибки — ошибка появляется очень редко и я никак не могу ее отловить — примерно раз в день при непрерывной работе — и форсировать немогу потому что не могу понимаю причину ее возникновения
Значит, нужно курить синхронизацию, мидитировать. По другому никак.
N>вот отловил ее в необработанных и думаю что дальше делать — самое простое просто убивать поток и продолжать работать как ни в чем не бывало но немогу — прога падает.
Проблема не с потоком, в котором произошла ошибка, а с тем, что повреждены, находятся в не согласованном состоянии некие данные. И "убийство" потока ничего не сможет исправить.
N>System.Collections.Queue использую не я я класс сокетов
N> at System.Net.Sockets.Socket+SocketAsyncResult.Complete()
N>внутренний класс в System.Net.Sockets.Socket.
Значит, нужно курить стек вызовов, разбираться, что может привести к ошибке — быть может и во фреймворке баг.