如何捕获从任务异常继承的任务用户定义异常

时间:2019-04-10 04:00:22

标签: c# task-parallel-library

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

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

0 个答案:

没有答案