1

この方法を使用して、ローカル変数にアクセスして async void メソッドを実行しています。

static void RunAsync(object var1, object var2)
{
    ThreadStart work = delegate
    {
        try
        {
            Statement1(var1);
            Statement2(var2);
            // etc
        }
        catch (Exception e) { }
    };
    new Thread(work).Start();
}

Visual Studio で単体テストをデバッグすると、多くの場合 が発生ThreadAbortExceptionしますが、テストの実行 (およびコードの実行) は正常に機能します。

これは何が原因ですか?

4

1 に答える 1

2

これは、RunAsyncメソッドを呼び出すとスレッドが作成されますが、テストが終了する前にテストが終了するTestMethodに戻るために発生します。テストが終了すると、すべてのスレッドを中止しようとするため、その例外が発生します。結合を使用して、スレッドが終了するまで待つ必要があります。

提案:

Thread t;
static void RunAsync(object var1, object var2)
{
    ThreadStart work = delegate
    {
        try
        {
            Statement1(var1);
            Statement2(var2);
            // etc
        }
        catch (Exception e) { }
    };
    t=new Thread(work);
    t.Start();
}
[TestMethod]
public void TestMethod()
{
   RunAsync();

   DoOtherStuff();
   if(t!=null)
      t.Join();

}
于 2013-01-17T16:09:30.790 に答える