异常未在Task.Run中捕获

时间:2016-12-02 11:34:27

标签: c# exception async-await task

我试图捕获由GetMoreCodes运行的方法(Task)抛出的异常,但是在调试时永远不会处理异常,并且永远不会触发catch块。尝试了不同的技术(特别是有/无等待)。此代码位于(async)按钮事件处理程序中。

try
{
    // Task.Run(() => GetMoreCodes(CodeBufferMaxSize));
    // await Task.Run(() => GetMoreCodes(0));
    await Task.Run(() => { throw new Exception("test!"); });
}
catch (Exception ex)
{
    Console.WriteLine("Exception caught: " + ex);
}

这就像我在这里和博客中看到的大多数例子一样,特别是在这个例子中(http://blog.stephencleary.com/ - 非常感谢@ stephen-cleary)。

现在,我只希望应用程序不会崩溃并记录错误(如果有的话)。 我错过了什么吗?

1 个答案:

答案 0 :(得分:-1)

await Task.Run(() => {
    try
    {
        throw new Exception("test!");
    }
    catch (Exception ex)
    {
        Console.WriteLine("Catched");
    }
});

为什么不抓住Task.Run()

如果你想用你的代码在Console.Application中捕获它,你可以这样做。但是t.Wait()阻止了UI线程并等待任务完成。

    public static void Main(string[] args)
    {
        try
        {
            Task t = TestError();
            t.Wait();
        }
        catch (Exception ex)
        {
            Console.WriteLine("Catched");
        }

        Console.ReadLine();

    }

    public static async Task TestError()
    {
            // Task.Run(() => GetMoreCodes(CodeBufferMaxSize));
            // await Task.Run(() => GetMoreCodes(0));
            await Task.Run(() => { throw new Exception("test!"); });
    }