стоит ему зациклитьсяИ он выжирает все доступные ресурсы. Это возможно и это нормально.
или встретить sleepА вот это не нормально, ибо Sleep одного потока должен наоборот переключать контекст.
Ссылка на объект не указывает на экземпляр объекта.Обычно стек указывает ещё и строчку, в которой возникло исключение. А по строчке уже легче понять, какой именно объект оказался недоступен.
public class Component
{
public Component(SceneObject ownerSceneObject)
{
this.ownerSceneObject = ownerSceneObject;
}
public readonly SceneObject ownerSceneObject;
}
public class SceneObject
{
private List<Component> components;
public void AddComponent<T>() where T : Component
{
var constructor = typeof(T).GetConstructor(new [] { typeof(SceneObject) });
var created = constructor.Invoke(new object[] { this }) as T;
if (created != null)
this.components.Add(created);
}
public SceneObject()
{
this.components = new List<Component>();
}
}
}
var pageNodes = document.DocumentNode.SelectNodes("//div[@id=\"pagination_related\"]//a");
if (pageNodes != null)
{
foreach (var node in pageNodes)
pages.Add(new Uri(this.Uri + node.Attributes[0].Value));
pages = pages.Distinct().ToList();
}
var chapterNodes = document.DocumentNode.SelectNodes("//div[@class=\"related_info\"]");
if (chapterNodes != null)
{
foreach (var node in chapterNodes)
{
var link = node.SelectSingleNode(".//h2//a");
var desc = node.SelectSingleNode(".//div[@class=\"related_tag_list\"]");
chapters.Add(new Chapter(new Uri(this.Uri, link.Attributes[0].Value), desc.InnerText));
}
}