2012-12-27 124 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

相关问题