2012-12-27 218 views
4

我已創建像下面如何在執行異步方法後調用成功的回調函數?

System.Threading.Tasks.Task.Factory.StartNew(
             () => AddAttachment(document, docId, user)).ContinueWith(
              task => BackUpQueuesMail(task.Exception, information, list), 
              TaskContinuationOptions.OnlyOnFaulted); 

我需要成功地執行AddAttachment()方法處理後的回調函數異步方法。我怎樣才能做到這一點?

回答

1

一種方法是:

System.Threading.Tasks.Task.Factory.StartNew(
             () => AddAttachment(document, docId, user)).ContinueWith(
              task => OnComplete(task), } 
              TaskContinuationOptions.None); 


private void OnComplete(task) 
{ 
    if(task.IsFaulted) 
    { 
    } 
    else if(task.IsComplete) {} 

} 
0

只需將OnlyOnFaulted更改爲OnlyOnRanToCompletion即可。

3

你需要提取出AddAttachment任務,那麼你可以使用continuation tasks來指定,如果你的主要任務未能執行什麼任務,要執行什麼任務,如果主要任務成功完成。

在此示例中MethodToRunWhenFinishSuccessfully將運行如果AddAttachment建成BackUpQueuesMail將情況AddAttachment失敗運行。

var addAttachmentTask = Task.Factory.StartNew(() => AddAttachment(document, docId, user)); 
addAttachmentTask.ContinueWith(t => MethodToRunWhenFinishSuccessfully(t), TaskContinuationOptions.OnlyOnRanToCompletion); 
addAttachmentTask.ContinueWith(t => BackUpQueuesMail(task.Exception, information, list), TaskContinuationOptions.OnlyOnFaulted); 
+0

您不需要延遲啓動。只需使用StartNew。 – usr

+0

感謝@usr,我已經更新了代碼示例。 – avivr

相關問題