2013-04-30 2 views
0

Приведенный ниже код размещает изображение на странице 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); 
     } 
    }); 

ответ

2

Если пишет «Не удалось опубликовать», то вы знаете, что задача нарушенными. Таким образом, вы можете узнать исключение с свойство Task.Exception. Обратите внимание, что это даст вам AggregateException, так как возможно, что несколько вещей пошло не так. (Это может быть невозможно в вашем случае, но это возможно в целом с задачами.)

Если вы можете использовать C# 5 вместо этого, то вы можете использовать await, что делает все это намного проще - исключение заканчивается тем, что вызывается в точке выражения await, когда задача не работает.

Если вы не можете использовать C# 5, вы может хочет использовать перегруженные ContinueWith, задающие параметры задачи продолжения: Вы можете прикрепить один продолжение только в случае успеха, и один продолжения только в случае отказа. Вам это не обязательно, но это может сделать проще, если ваша обработка отказа всегда одна и та же.

+0

Отлично, я не знал, что в Задаче есть свойство Exception. Можно ли разделить AggregateException на несколько исключений и определить, откуда происходят ошибки? Кстати, только что начал читать твою книгу, чертовски потрясающий материал! (Я чувствую, что звезда поражена) –

+1

@MarkGladstone: Абсолютно - посмотрите ['AggregateException.InnerExceptions'] (http://msdn.microsoft.com/en-GB/library/system.aggregateexception.innerexceptions.aspx). (Скорее всего, там только будет, заметьте.) –

+1

Отлично, не мог попросить лучшего ответа, спасибо, Джон! –

Смежные вопросы