Я пишу обработчик для события Unhandled Exception, который мы вычеркиваем исключение в файл, а затем отправляем на сервер для дальнейшего анализа. Пока я хочу сохранить исключение в файл и показать его в следующем прогоне. Из обработчика я звоню функцию, которая имеет такую реализацию:Написание файла асинхронно в обработчике необработанных исключений
public async Task WriteDataAsync(string filename, string data)
{
var file = await this.storageFolder.CreateFileAsync(filename, CreationCollisionOption.ReplaceExisting);
await FileIO.WriteTextAsync(file, data);
}
Проблема заключается в том, что, если файл не существует он будет создан, но данные исключения не сохраняется в файл. Однако, если файл существует, данные сохраняются должным образом. Эта функция работает, когда она не используется при обработке необработанного исключения.
У меня есть два вопроса в этом вопросе.
- В чем причина такого поведения в этом контексте. Я предполагаю, что это связано с тем, как работают методы async/await, что нормально для нормальных ситуаций, но имеет проблемы с обработкой исключений в этом контексте.
Существуют ли другие решения для записи в файл асинхронно в этом контексте? У меня есть одно рабочее решение, которое заключается в том, чтобы синхронно запускать функцию запуска в этом случае.
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