我想超時並在等待指定的時間後拋出異常,並且想知道我現在正在執行的方式是否最好。超時如果方法需要太長的時間才能完成
class Timeout
{
XmlDocument doc;
System.Object input;
public Timeout(XmlDocument doc, System.Object input)
{
this.doc = doc;
this.input = input;
}
public void run()
{
if (input is Stream)
{
doc.Load((Stream)input);
}
else if (input is XmlReader)
{
doc.Load((XmlReader)input);
}
else if (input is TextReader)
{
doc.Load((TextReader)input);
}
else
{
doc.Load((string)input);
}
System.Threading.Thread.CurrentThread.Abort();
}
}
private void LoadXmlDoc(XmlDocument doc, System.Object input)
{
Timeout timeout = new Timeout(doc, input);
System.Threading.Thread timeoutThread = new System.Threading.Thread(new ThreadStart(timeout.run));
timeoutThread.Start();
System.Threading.Thread.Sleep(this.timeout * 1000);
if (timeoutThread.IsAlive)
{
throw new DataSourceException("timeout reached", timeout.GetHashCode());
}
}
這種當前的方法確實有效,所以我只是想知道是否有更簡單/更好的方式去完成相同的事情。
這裏有一件事我在[MSDN](挖出http://msdn.microsoft.com/ EN-US /庫/ 5b50fdsz(v = vs.110)的.aspx)。基本上,你不需要在'run()'中放棄線程。它會拋出異常而不是完成線程。哦,除此之外,我真的不知道還有什麼可以改變的。 – bubbinator