4

我创建了一个异步方法,如下所示

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

在 AddAttachment() 方法处理成功后,我需要执行一个回调函数。我怎么可能呢?

4

3 回答 3

3

您需要提取 AddAttachment 任务,然后您可以使用延续任务指定如果您的主要任务失败执行什么任务,如果主要任务成功完成则执行什么任务。

在此示例中,如果AddAttachment完成,则MethodToRunWhenFinishSuccessfully将运行,如果AddAttachment失败,则BackUpQueuesMail将运行。

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);
于 2012-12-27T08:22:27.377 回答
2

一种方法是:

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) {}

}
于 2012-12-27T07:38:27.793 回答
0

只需更改OnlyOnFaultedOnlyOnRanToCompletion.

于 2012-12-27T07:36:53.153 回答