0

我定义了一个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
    });
}

当它超时时,它会抛出一个异常,但程序会崩溃,因为它说:有一个用户未处理的异常。
我不知道原因,因为我在主线程中捕获了它两次,但是仍然没有捕获它。
如果你知道原因,请告诉我!非常感谢!

4

0 回答 0