我定义了一个CrawlerTimeoutException
,它是从任务异常继承的,当我将其放入代码中时,无法在主线程中捕获它,代码如下:
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
}
我将CrawlerTimeoutException
扔到了功能task.Crawl().Timeout(timeout)
中;
代码如下:
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
});
}
当超时时,它将引发异常,但是该程序将崩溃,因为它说:有一个用户未处理的异常。
我不知道原因,因为我在主线程中两次捕获了它,但是仍然不要捕获它。
如果您知道原因,请告诉我!
非常感谢!