2017-12-02 2 views
0

私のコードで "ネスト"または "カプセル化"カスタムエラー(I504Error)をキャッチしようとしています。私はこれが通常、ベストプラクティスではないことを知っていますが、エラーが非常に具体的なので、私のユースケースではうまくいくはずです。 try/catchブロックをMainメソッドのI504Errorにキャッチするようにしようとしていますが、try/catchブロック内から呼び出されていてもキャッチしません。私のプログラムは、私がエラーを投げている場所で停止します。私はここで間違って何をしていますか?C#は "ネスト"カスタム例外をキャッチしません

// Custom Error Handler 
public class I504Error : Exception 
{ 
    public I504Error() 
    { 
    } 
} 

// Classes 

public abstract class AbstractIternetThing 
{ 
    public abstract void DoSomething(); 
} 

public class IternetThing : AbstractIternetThing 
{ 
    public override void DoSomething() 
    { 
     // bunch of other stuff 
     if (iternetThingWorkedProperly == false) 
     { 
      // Program stops here, doesn't get caught by the try/catch block in Program.Main() 
      throw new I504Error(); 
     } 
    } 
} 

// Main script 
class Pogram 
{ 
    static void Main(string[] args) 
    { 
     List<Task<AbstractIternetThing>> programThreads = new List<Task<AbstractIternetThing>>(); 
     IternetThing iThing = new IternetThing(); 

     try 
     { 
      for (int wantedThread = 0; wantedThread < 5; wantedThread++) 
      { 
       Task<AbstractIternetThing> iThingTask = new Task<AbstractIternetThing>(() => iThing.DoSomething()); 
       iThingTask.Start(); 
      } 
     } 
     // The Error should get caught here, but it doesnt? 
     catch (I504Error) 
     { 
      // Do something else 
     } 
    } 
} 

答えて

2

これは別の非同期実行パスにあるTaskにあるためです。 async-awaitの使用を検討してください。その後、コンパイラはコードを書き換えて期待どおりに動作させるようにします。

関連する問題