未処理の例外イベントのハンドラを作成しています。このハンドラは、例外をファイルにダンプし、さらに解析するためにサーバに送信します。今のところ私は例外をファイルに保存し、次回の実行時にそれを表示したいと考えています。ハンドラから私はこのような実装を持っている機能を、呼んでいる:未処理の例外ハンドラにファイルを非同期で書き込む
public async Task WriteDataAsync(string filename, string data)
{
var file = await this.storageFolder.CreateFileAsync(filename, CreationCollisionOption.ReplaceExisting);
await FileIO.WriteTextAsync(file, data);
}
問題は、ファイルが存在しなかった場合、それが作成されますが、例外データがファイルに保存されていないということです。しかし、ファイルが存在する場合、データは適切に保存されます。この関数は、未処理例外の処理に使用されていない場合に機能します。
私はこの問題に関して2つの質問があります。
- このような状況では、どのような理由がありますか。私はasync/awaitメソッドが正常に動作するように動作する方法と関係がありますが、このコンテキストでは例外を処理する際に問題があると思います。
このような状況でファイルに非同期で書き込む方法はありますか?この場合、同期機能を実行するための解決策が1つあります。
public void WriteDataAsync(string filename, string data) { var fileTask = this.storageFolder.CreateFileAsync(filename, CreationCollisionOption.ReplaceExisting).AsTask(); var writingToFileTask = FileIO.WriteTextAsync(fileTask.Result, data).AsTask(); writingToFileTask.Wait(); }
私は書き込みの前にファイルを作成することも考えました。ただし、データは再度ファイルに書き込まれませんでした。
関連するすべてのコード、つまりイベントハンドラを表示できますか?データが書き込まれる前にアプリケーションが終了する可能性はありますか? – svick