1

次のコードを見てください。

try
{
    Parallel.Foreach(...)//50 Thread For Each Time
    {
        string str = MyMethod();
    }
}
catch
{

}
public string MyMethod()
{
     CookieContainer cookieJar = new CookieContainer();

     // Some code that throws an exception.
}

cookieJarcatch ブロック に渡すにはどうすればよいですか?

注:
何らかの理由で、グローバル変数を使用できません。私は in を使用Parallel.ForEachしており、並行変更のため、try内部でグローバル変数を制御できません。MyMethod

4

1 に答える 1

4

例外をキャッチして、オブジェクトMyMethodを保持する新しい例外を再スローできます。CookieContainer

try
{
    Parallel.ForEach(...)
    {
        string str = MyMethod();
    }
}
catch (AggregateException ae)
{
    // This is where you can choose which exceptions to handle.
    foreach (var ex in ae.InnerExceptions.OfType<MyCookieException>())
    {
        CookieContainer c = ex.CookieContainer;

        // Do stuff with CookieContainer.
    }
}

public string MyMethod()
{
     CookieContainer cookieJar = new CookieContainer();
     try
     {
         // Some code that throws an exception
     }
     catch (Exception ex)
     {
         throw new MyCookieException(ex, cookieJar);
     }
}
于 2012-10-13T15:01:43.270 に答える