.Net IsNothing и Is Not Nothing, вызывающие исключение в блоке Catch/ finally при использовании задач
**Редактировать
Снимите флажок "Включить оптимизации" в опциях предварительной компиляции, не будет вызывать эту ошибку.
Удаление цикла For в коде также не вызовет этой проблемы.
Присвоение переменной SF переменной уровня класса и проверка этого ни за что не вызовет этой проблемы.
Конец Редактировать **
Мой обработчик события нажатия кнопки имеет локальные переменные SF и HostSystem, которые я заполняю из базы данных SQLite с помощью EF6.
Обработчик события click обозначается с помощью асинхронного метода, поскольку он порождает задачу и ожидает ее выполнения.
В блоке finally я проверяю, является ли SF пустым, вызывая методы IsNothing/ IsNot Nothing. Однако эти конструкции выдают ошибку ("Ссылка на объект не установлена для экземпляра объекта"). Бывает только в режиме Release.
Мой код, который я могу воспроизвести в 4.5.2 ниже. Любая помощь о том, почему IsNothing генерирует ошибку, будет принята с благодарностью. Как всегда, спасибо.
Private Async Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim Hostsystem As SupportSystem
Dim SF As SendFile
Try
SF = db.SendFiles.FirstOrDefault(Function(SFile) SFile.Name = "DailySummary")
Hostsystem = db.SupportSystems.FirstOrDefault(Function(x) x.Name = SF.SupportSystemName)
For i = 1 To 1
Dim TaskSendFile As Task(Of String) = Task(Of String).Factory.StartNew(Function()
Throw New ApplicationException("App Error")
Return ""
End Function)
Await TaskSendFile
Next
MessageBox.Show("All Done")
Catch ex As Exception
MessageBox.Show("Error : " + ex.Message)
Finally
Try
**'The below check is what is throwing error.**
If Not IsNothing(SF) Then
End If
Catch ex As Exception
MessageBox.Show("Unexpected Error in the finally block. " + ex.StackTrace)
End Try
End Try
End Sub