У меня в настоящее время возникают проблемы с методом, который генерирует исключение, но я не уверен, почему. Исключение делает мое приложение аварийным.Async Method throws Exception
System.NullReferenceException: Object reference not set to an instance of an object.
at Myapp.AutoProcess.<ToRead>d__36.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.AsyncMethodBuilderCore.<ThrowAsync>b__1(Object state)
at System.Threading.QueueUserWorkItemCallback.WaitCallback_Context(Object state)
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem()
at System.Threading.ThreadPoolWorkQueue.Dispatch()
at System.Threading._ThreadPoolWaitCallback.PerformWaitCallback()
бегает метод в отдельном потоке
Thread listenerThread = new Thread(() => ToRead());
listenerThread.Start();
Метод, который бросает исключение выглядит следующим образом:
private async void ToRead()
{
while (true)
{
if (this.toRead.Count != 0)
{
string protocol = this.toRead[0];
string[] temp = protocol.Split(',');
string message = temp[0];
string UserName = temp[1];
Process(message, UserName);
this.toRead.RemoveAt(0);
}
await Task.Delay(200);
}
}
Он принимает входящие сообщения из списка и отфильтровывает Username и Message, чтобы отправить его методу Process. Буду признателен, если кто-нибудь сможет мне помочь.
Примечание. Исключение происходит примерно раз в день, запуская его на сервере Windows R2 2008 Server. Поэтому я не могу отладить его в Visual Studio
Отладка программы. Где он падает? Узнайте, что было нулевым. Вы проводили какое-либо расследование? – usr
Почему вы используете метод async? Заставьте его вернуть «Задачу», а затем вы можете «ждать» ее. –
Так же, как Даниэль упомянул, что ваш ToRead() - это просто другой поток. Посмотрите на асинхронный процесс и подождите немного. – loop