代码应该抛出异常,但事实并非如此

时间:2013-04-30 06:07:25

标签: c# facebook exception task

以下代码将图片发布到Facebook页面。但是,当它失败时(无论出于何种原因),它不会抛出任何异常,因此我无法找出失败的根本原因(只提供我提供的一般消息(“无法发布”)。我如何改变下面的代码显示实际错误?

这是使用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);
        }
    });

1 个答案:

答案 0 :(得分:2)

如果它正在写“发布失败”,那么您就知道该任务已经出现故障。因此,您可以使用Task.Exception属性找出异常。请注意,这将为您提供AggregateException,因为可能出现了多个问题。 (在你的情况下,这可能是不可能的,但通常可以完成任务。)

如果您可以使用C#5,那么您可以使用await使这一切变得更加容易 - 当任务出现故障时,异常最终会被await表达式抛出。

如果您不能使用C#5,可能想要使用指定任务延续选项的ContinueWith重载:您可以为成功案例附加一个延续,并且仅针对失败案例的一个延续。您没有必要,但如果您的故障处理始终相同,它可以使事情变得更简单。

相关问题