代码应该抛出一个异常,但它没有'

本文关键字:异常 一个 代码 | 更新日期: 2023-09-27 18:11:32

下面的代码将图片发布到Facebook页面。然而,当它失败时(无论出于什么原因),它不会抛出任何异常,因此我无法找到失败的根本原因(我只提供了一条通用消息("Failed to post"))。如何修改下面的代码来显示实际的错误?

这是使用Facebook c# SDK

FacebookClient fbClient = new FacebookClient(accessToken);
fbClient.PostTaskAsync(path, post)
    .ContinueWith(task => 
    {
        if (!task.IsFaulted)
        {
            if (((IDictionary<string, object>)post).ContainsKey("scheduled_publish_time"))
            {
                DateTime dateTime = Utilities.ConvertUnixTimeStampToDateTime(Double.Parse((((dynamic)post).scheduled_publish_time)), true);
                OnFacebookPostSuccess("Successfully posted: (" +
                                dateTime + ") " + postText);
            }
            else
            {
                OnFacebookPostSuccess("Successfully posted: (" +
                                DateTime.Now + ") " + postText);
            }
        }
        else
        {
            OnFacebookPostFailed("Failed to post " + filename);
        }
    });

代码应该抛出一个异常,但它没有'

如果显示"Failed to post",那么你就知道任务失败了。所以你可以找出Task.Exception属性的例外。注意,这将给您一个AggregateException,因为有可能有多个事情出错。(这在您的情况下可能不可能,但对于一般任务来说是可能的。)

如果您可以使用c# 5,那么您可以使用await,这使得所有这些都更容易-当任务出错时,异常最终会在await表达式处抛出。

如果你不能使用c# 5,你可能想要使用ContinueWith的重载,它指定了任务延续选项:你可以为成功的情况附加一个延续,为失败的情况附加一个延续。您不必这样做,但如果您的故障处理总是相同的,则可以使事情变得更简单。