Dart で Web サーバーを作成しましたが、例外について質問があります。私の HttpServer requesthandler では、メソッド全体に try-catch ブロックを追加しました。
try{
...
} catch(e) {
...
}
したがって、これにより、クライアント要求が Web サーバーをクラッシュさせるのを防ぐことができると期待していました。問題は、このブロック内から特定の例外がスローされるとクラッシュする可能性があることです (他のモジュールに大きくネストされていますが、このブロックから開始されます)。以下は、このような例外の例です。
Unhandled exception:
FutureUnhandledException: exception while executing Future
Illegal argument(s)
original stack trace:
#0 _StringBase._createFromCodePoints (dart:core-patch:1403:3)
#1 _StringBase.createFromCharCodes (dart:core-patch:1400:33)
#2 String.String.fromCharCodes (dart:core-patch:1788:43)
#3 _StringDecoderBase.decoded (dart:io:6485:12)
#4 _File.readAsString.<anonymous closure> (dart:io:1307:29)
#5 _FutureImpl.transform.<anonymous closure> (bootstrap:881:37)
#0 _FutureImpl._complete (bootstrap:844:11)
#1 _FutureImpl._complete (bootstrap:848:5)
#2 _FutureImpl._setException (bootstrap:873:14)
#3 _CompleterImpl.completeException (bootstrap:948:30)
#4 _FutureImpl.transform.<anonymous closure> (bootstrap:884:36)
#5 _FutureImpl._complete (bootstrap:840:19)
#6 _FutureImpl._complete (bootstrap:848:5)
#7 _FutureImpl._setValue (bootstrap:862:14)
#8 _CompleterImpl.complete (bootstrap:945:26)
#9 _File.readAsBytes.<anonymous closure> (dart:io:1281:25)
#10 _BaseDataInputStream._checkScheduleCallbacks.issueCloseCallback (dart:io:6345:59)
#11 _Timer._createTimerHandler._handleTimeout (dart:io:6918:28)
#12 _Timer._createTimerHandler._handleTimeout (dart:io:6926:7)
#13 _Timer._createTimerHandler.<anonymous closure> (dart:io:6934:23)
#14 _ReceivePortImpl._handleMessage (dart:isolate-patch:37:92)
これが try-catch ブロックでキャッチされないのはなぜですか? 内部から呼び出されるコードでスローされます (スタックトレースには表示されませんが)。
Dart で例外がどのように機能するかについて何か見逃していると思いますので、教えていただければ幸いです :)