ReadTextAsync возвращает ноль, если не пройти через точку останова - PullRequest
0 голосов
/ 04 марта 2019

В UWP я записываю в файл (текстовый файл 20K ascii), используя WriteTextAsync, затем читаю тот же файл, используя ReadTextAsync.Когда я запускаю с точкой останова, проходя через ReadRawTextFromFile, он работает нормально.Когда я работаю нормально (без точек останова), я получаю нулевой возврат из ReadTextAsync.Я не получаю никаких исключений.Что я могу сделать, чтобы заставить это читать файл.

// This is for writing the RawText
private async void WriteRawTextToFile(string fname, string textToWrite)
{
    try
    {
        StorageFolder localFolder = ApplicationData.Current.LocalFolder;
        StorageFile localFile = await localFolder.CreateFileAsync(fname, CreationCollisionOption.ReplaceExisting);
        await FileIO.WriteTextAsync(localFile, textToWrite);
    }
    catch(Exception e)
    {
        Console.WriteLine($"WriteRawTextToFile Exception: '{e}'");
    }
}

private string TextFromFile;    // to get back from the file read
private async void ReadRawTextFromFile(string fname, string defaultString)
{
    try
    {
        StorageFolder localFolder = ApplicationData.Current.LocalFolder;
        StorageFile localFile = await localFolder.GetFileAsync(fname);
        TextFromFile = await FileIO.ReadTextAsync(localFile);        // get Text from the file
    }
    catch (Exception e)
    {
        Console.WriteLine("Exception: " + e.ToString());
        TextFromFile = defaultString;
    }
}

1 Ответ

0 голосов
/ 04 марта 2019

Попытка объяснить, что @HenkHolterman означает в комментарии,

async и async Task, у которых нет возвращаемого типа (void), не совсем подходит для Exception, и они могут быть выбрасываемыми.означают только для асинхронного прослушивателя событий, но не для async Task<T> или async T, которые имеют тип возвращаемого значения, где, если есть какое-либо исключение, то исключение будет передано вызывающей стороне через тип возвращаемого значения.а также вы можете сослаться здесь о лучших практиках асинхронной обработки и ждать

мое предложение

  1. , чтобы метод async имел тип возврата, boolили Task<bool> например, чтобы указать, успешен ли метод, выполняя свою задачу
  2. вы делаете это на UWP, верно?я точно не помню (или, может быть, даже не знаю) о том, как UWP обрабатывает запрос хранилища / дискового ввода-вывода, но вы уверены, что у вашего кода / приложения уже есть необходимые разрешения?
  3. я не знаю базовыхметоды и тому подобное, но если WriteLines() из Console не работает для вывода ошибки и тому подобное, попробуйте использовать Debug.WriteLines() из пространства имен System.Diagnostics.Это может или не может быть вашей реальной проблемой, касающейся отсутствия исключений, выводимых в окно вывода

, также пытающихся объяснить, что означает @MichaelRandal (также из комментария)

Высделал «экстраординарные претензии», если я могу процитировать из комментария, относительно точек останова, из-за этого мы надеемся, что вы уточните больше, например, предоставив больше информации, возможно, вывод стека, вывод точек останова и тому подобное, таким образом, любой, кто мог быхотите ответить или внести свой вклад не нужно постоянно запрашивать необходимую информацию

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...