...ing logging 4.0

はてなブログに移行しました。D言語の話とかいろいろ。

std.concurrency.spawnで実行しているスレッドでのassertが捕捉されない

ずっとassertが使えなくて困っていたのですが,ふと思いついて試してみたところ,
AssertError型を自分で捕まえるtry-catchを自分で書かないといけないことがわかりました.

import std.stdio;
import std.concurrency;

void f()
{
    //try
    //{
        writeln("1");
        assert(false);
    //}
    //catch(Throwable t)
    //{
    //  writeln(t);
    //}
}

void main()
{
    auto tid = spawn(&f);
    readln();
}

コメントアウトをしたままだと

1

コメントを外すと

1
core.exception.AssertError@a(9): Assertion failure

となります.

追記

assertなのでcatchした後に再スローした方がいいかも.

catch (Throwable t)
{
  writeln(t);
  throw t;
}