4

我有一些代码,如下如果电流失败,如何继续队列中的其他任务?

private static void ExecuteOnTaskFailure(Task previousTask) 
{ 
    if (!previousTask.IsFaulted) 
     return; 

    if (previousTask.Exception != null && previousTask.Exception.InnerExceptions != null) 
     foreach (var exception in previousTask.Exception.InnerExceptions) 
     { 
      Logger.Error("Task failed continued to the next task : " + exception.Message, exception); 
     } 
} 

这不工作执行像下面

Queue 
    .GetConsumingEnumerable() 
    .ToObservable() 
    .Select(x => x.ObserveOn(NewThreadScheduler.Default)) 
    .SubscribeOn(NewThreadScheduler.Default) 
    .Subscribe(
     grp => grp.ForEachAsync(b => b.Execute()) 
        .ContinueWith(ExecuteOnTaskFailure, TaskContinuationOptions.OnlyOnFaulted)); 

方法ExecuteOnTaskFailure被定义的队列。我似乎无法弄清楚如何让队列中的任务继续执行,即使其中一个任务执行失败。我还有一种方法可以在排队结束时重新排除这个失败的任务吗?

这里的任何帮助,非常感谢。

回答

1

这听起来像你想要的是一个try - 在循环catch

grp.ForEachAsync(async b => 
{ 
    try 
    { 
     await b.Execute(); 
    } 
    catch (Exception ex) 
    { 
     Logger.Error(ex); 
     Queue.Add(b); 
    } 
}) 

BlockingCollection不是很异步友好,因为它可以阻止(顾名思义),当它是空的。你可能想要考虑一种不同的方法。

+0

+ 1 for reply and try catch!我最终结束了这样做,没有时间更新这篇文章。 –

相关问题