我定义了一个CrawlerTimeoutException继承自任务异常,当我在代码中抛出它时,我无法在主线程中捕获它,代码如下:</p>
try
{
Random rand = new Random();
await Task.Delay(rand.Next(300, 1000)); //sims clicks
var webcontent = await task.Crawl().Timeout(timeout);
}
catch (CrawlerTimeoutException)
{
//do something
}
catch (Exception exp)
{
//do something
}
我扔了CrawlerTimeoutExceptionin 函数task.Crawl().Timeout(timeout);
代码如下:</p>
public static Task<T> Timeout<T>(this Task<T> task, int millisecondsTimeout)
{
return Task.Factory.StartNew(() =>
{
bool succ = task.Wait(millisecondsTimeout);
if (succ)
return task.Result;
else
throw new CrawlerTimeoutException("Task timeout");//here is the error
});
}
当它超时时,它会抛出一个异常,但程序会崩溃,因为它说:有一个用户未处理的异常。
我不知道原因,因为我在主线程中捕获了它两次,但是仍然没有捕获它。
如果你知道原因,请告诉我!非常感谢!