C# 代码应该抛出异常,但它不会';T

C# 代码应该抛出异常,但它不会';T,c#,facebook,exception,task,C#,Facebook,Exception,Task,下面的代码将图像发布到Facebook页面。但是,当它失败时(无论出于何种原因),它不会抛出任何异常,因此我无法找到失败的根本原因(仅是我提供的一条通用消息(“Failed to post”)。我如何更改下面的代码以显示实际错误 这是使用Facebook的C#SDK FacebookClient fbClient=新的FacebookClient(accessToken); fbClient.PostTaskAsync(路径,post) .ContinueWith(任务=> { 如果(!task

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

这是使用Facebook的C#SDK

FacebookClient fbClient=新的FacebookClient(accessToken);
fbClient.PostTaskAsync(路径,post)
.ContinueWith(任务=>
{
如果(!task.IsFaulted)
{
if(((词典)post).ContainsKey(“预定发布时间”)
{
DateTime DateTime=Utilities.ConvertUnixTimeStampToDateTime(Double.Parse(((动态)post.scheduled_publish_time)),true);
OnFacebookPostSuccess(“已成功发布:(”+
dateTime+“”“+postText);
}
其他的
{
OnFacebookPostSuccess(“已成功发布:(”+
DateTime.Now+“”“+postText);
}
}
其他的
{
OnFacebookPostFailed(“发布失败”+文件名);
}
});
如果它写的是“未能发布”,那么您就知道任务出现了故障。因此,您可以通过属性找到异常。请注意,这将给您一个
聚合异常,因为可能有多个问题出现了。(在您的情况下,这可能不可能,但在任务中通常是可能的。)

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


如果你不能使用C#5,你可能想使用
ContinueWith
的重载来指定任务延续选项:你可以只为成功案例附加一个延续,为失败案例附加一个延续。你不必这样做,但如果失败处理总是一样的话,它可以使事情变得更简单。

非常好,我不知道任务中有一个异常属性。是否可以将AggregateException拆分为多个异常,并确定错误的来源?顺便说一句,我刚刚开始阅读你的书,该死的神奇东西!(我感到震惊)@MarkGladstone:绝对-看。(请注意,很可能只会出现在中。)
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);
        }
    });