在并行forEach中的catch上再次调用该函数

时间:2017-12-13 18:08:07

标签: c#

我有这样的代码

Task.Run(() =>
{
    ParallelOptions options = new ParallelOptions();
    options.MaxDegreeOfParallelism = (int)(1);

    Parallel.ForEach(addresses, options, (address) =>
    {
        var nr1 = address.Split(new string[] { ":" }, StringSplitOptions.None)[0];
        var nr2 = address.Split(new string[] { ":" }, StringSplitOptions.None)[1];
        DoAddressStuff(nr1 , nr2 );
    });
});

public void DoAddressStuff(string stuff, string stuff2) {
 try {} catch (WebDriverTimeoutException e) {
  // Do Something
 }
}

基本上,我正在努力实现的目标。如果网站加载时间太长,它会捕获WebDriverTimeoutException,我不确定我怎么能retry我已经完成了对该函数的调用。

我正在努力实现的一个例子: 如果它调用DoAddressStuff("data", "data")并且网站将无法加载,则它会在并行中再次调用该函数。可以这样做吗?

1 个答案:

答案 0 :(得分:0)

更新方法DoAddressStuff以返回成功与否。类似下面的内容

public bool DoAddressStuff(string stuff, string stuff2) 
{
bool retval  = true;
  try {} 
  catch (WebDriverTimeoutException e) 
  {
  // Do Something
  retVal = false;
 }
return retVal;
}

然后将通话更改为以下内容

if(!DoAddressStuff(nr1 , nr2 ));//may be add number of retries
{
   DoAddressStuff(nr1 , nr2 )
}