gpt4 book ai didi

c# - 如果当前失败,如何继续队列中的其他任务?

转载 作者:行者123 更新时间:2023-11-30 12:48:22 24 4
gpt4 key购买 nike

我有一些代码可以执行如下所示的队列

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

方法ExecuteOnTaskFailure定义如下

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

这行不通。我似乎无法弄清楚如何使队列中的任务继续执行,即使其中一个任务无法执行。还有一种方法可以让我在队列末尾重新排队这个失败的任务吗?

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

最佳答案

听起来您想要的是循环中的try-catch:

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

但是 BlockingCollection 对异步不是很友好,因为它会在它为空时阻塞(顾名思义)。您可能需要考虑一种不同的方法。

关于c# - 如果当前失败,如何继续队列中的其他任务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14318686/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com