2013-03-23 2 views
0

다트 Webapp에서 Isolates를 사용하려고하는데 오류 콜백 인수가 작동하지 않는 것처럼 보입니다. Dartium에서 실행되는 매우 기본적인 코드가 있습니다.Dart Isolate unhandledExceptionCallback을 어떻게 사용해야합니까?

import "dart:isolate"; 

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

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

"메인"보다 절대로 아무것도 표시되지 않습니다. 콘솔에 인쇄되어 있습니다. 내가 잘못한 일을하고 있니?

+0

내가 아는 한, 아직 구현되지 않았습니다. – Ladicek

+0

그런 다음 격리 (Isolate)에서 메시지를 잡아서 기록하는 가장 쉬운 방법은 무엇입니까? 격리는 DOM에 액세스하거나 콘솔에 인쇄 할 수 없습니다. 예외가 스트림에서 직렬화 가능한지 여부는 알 수 없습니다.이 경우 MessageBox 및 streamSpawnFunction 변형을 사용하여 호스트 코드로 보낼 수 있고 거기에 인쇄 할 수 있기 때문입니다. 하지만 이것은 지옥처럼 추악합니다. ( – NagyI

+0

좋습니다.하지만이 방법은 매우 엉망이됩니다.) 독자적으로 래퍼 Isolate 클래스를 작성할 수 있습니다. 어쨌든 이미 도우미 코드가 필요한 양방향 통신이 필요합니다. 어쨌든 이전 Dart 버전에서 Isolate 클래스를 제거하는 것이 왜 좋았는지 모르겠습니다. 혼자서 스트림을 재현하는 것이 훨씬 더 혼란 스럽습니다. – NagyI

답변

2

error-callback은 새 분리에서 실행됩니다. 따라서 동적 클로저는 될 수 없지만 정적 함수 여야합니다.

나는 그것을 테스트하지 않았습니다

하지만이 작동합니다 :

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가 발생합니다.

관련 문제