У меня есть кусок кода restsharp, написанный на c #, который выглядит следующим образом:
Parallel.ForEach(list, marketplace =>
{
var findingKeyToUse = findingApiKeys[new Random().Next(findingApiKeys.Count())];
var initialURL = "example.com/api";
var client = new RestClient(initialURL);
var request = new RestRequest(Method.GET);
var xmldoc = new XMLDocument();
xmldoc.LoadXML(client.Execute(request).Content);
});
Примечание: ответ от API возвращается в формате XML;
В какой-то момент я заметил, что ответ от API искажен по неизвестной причине, по которой я не смог воспроизвести его с моей стороны. Исключение в основном выглядит так:
(Inner Exception #3) System.Xml.XmlException: The 'meta' start tag on line 7 position 2 does not match the end tag of 'head'. Line 9, position 3.
at System.Xml.XmlTextReaderImpl.Throw(Exception e)
at System.Xml.XmlTextReaderImpl.Throw(String res, String[] args)
at System.Xml.XmlTextReaderImpl.ThrowTagMismatch(NodeData startTag)
at System.Xml.XmlTextReaderImpl.ParseEndElement()
at System.Xml.XmlTextReaderImpl.ParseElementContent()
at System.Xml.XmlTextReaderImpl.Read()
at System.Xml.XmlLoader.LoadNode(Boolean skipOverWhitespace)
at System.Xml.XmlLoader.LoadDocSequence(XmlDocument parentDoc)
at System.Xml.XmlLoader.Load(XmlDocument doc, XmlReader reader, Boolean preserveWhitespace)
at System.Xml.XmlDocument.Load(XmlReader reader)
at System.Xml.XmlDocument.LoadXml(String xml)
at DB_Layer.CompetitorResearchDailyUpdater.<>c__DisplayClass4_0.<FetchRestItems>b__0(Int32 page) in ...
at System.Threading.Tasks.Parallel.<>c__DisplayClass17_0`1.<ForWorker>b__1()
at System.Threading.Tasks.Task.InnerInvoke()
at System.Threading.Tasks.Task.InnerInvokeWithArg(Task childTask)
at System.Threading.Tasks.Task.<>c__DisplayClass176_0.<ExecuteSelfReplicating>b__0(Object )<---
Я подозреваю, что получаю это исключение, потому что запросы к API выполняются параллельно, когда несколько запросов отправляются за одну секунду.
Итак, я подумал о том, как лучше всего обработать это исключение, и чтобы я мог изящно его кодировать, чтобы мое приложение также могло обрабатывать будущие исключения, которые могут возникнуть во время выполнения запросов;
Чего я хотел бы добиться с помощью логики повторов, так это в случае с ex. возникает это исключение, когда запрос повторно отправляется на сервер для конкретного запроса этого параметра, который отправляется через этот URL:
example.com/api?parameterid=someid
Так что, если, например, произошло исключение для параметра idid = 12, я бы хотел, чтобы запрос был повторен для этого конкретного параметра.
Как мне этого добиться с помощью restsharp?