0

Dart WebアプリケーションでIsolatesを使用しようとしていますが、エラーコールバック引数を機能させることができないようです。Dartiumで実行されている非常に基本的なコードがあります。

import "dart:isolate";

void main() {
  print("Main.");
  spawnFunction(test, (IsolateUnhandledException e) {
    print(e);
  });
}

void test() {
  throw "Ooops.";
}

「メイン」以外は見たことがありません。コンソールに印刷されます。私は何か間違ったことをしていますか、それとも今これは壊れていますか?

4

1 に答える 1

2

エラーコールバックは、新しい分離で実行されます。したがって、動的クロージャにすることはできませんが、静的関数である必要があります。

私はそれをテストしていませんが、これはうまくいくはずです:

import "dart:isolate";

bool errorHandler(IsolateUnhandledException e) {
  print(e);
  return true;
}

void test() {
  throw "Ooops.";
}

void main() {
  // Make sure the program doesn't terminate immediately by keeping a
  // ReceivePort open. It will never stop now, but at least you should
  // see the error in the other isolate now.
  var port = new ReceivePort();
  print("Main.");
  spawnFunction(test, errorHandler);
}

注:dart2jsでは、この機能はまだ実装されていません。古いバージョンは引数を無視していました。新しいバージョンでは、UnimplementedErrorがスローされます。

于 2013-03-23T18:58:17.517 に答える