Завершение задачи процесса синхронизации не ожидается - PullRequest
0 голосов
/ 06 ноября 2018

Мое приложение WPF MVVM загружает файлы (почти 10000 файлов) в папку. ProgressExplorerValue - это значение индикатора выполнения.

public async Task ChargeFolderAsync()
{
    IsTaskConversionFinish = false;
    var rs = await Task.Run(() => LoadEntriesInFolder());
    IsTaskConversionFinish = true;
    ProgressExplorerValue = 0;
}

public IEnumerable<Record> LoadEntriesInFolder()
 {
     var rs = new List<Record>();
     var di = new DirectoryInfo(InitPath).EnumerateFiles();
     double factorPercent = di.Count() == 0 ? 0 : 100d / di.Count();            

     foreach (var file in di)
     {
         Record rc = new Record()
         {
             MetaName = file.Name,
             MetaPath = file.FullName
         };
         rs.Add(rc);
         ProgressExplorerValue += factorPercent;
     }
     return rs;
 }

Задание не ожидается на линии await Task.Run(() => LoadEntriesInFolder());. Когда я отлаживаю, он переходит с этой строки на следующую без перерыва, даже если метод LoadEntriesInFolder еще не завершен.

Ответы [ 2 ]

0 голосов
/ 06 ноября 2018

Как вы вызываете свой метод ChargeFolderAsync? Я назвал это в program.cs, как показано ниже.

static void Main(string[] args)
{
    new FileLoader().ChargeFolderAsync().GetAwaiter().GetResult();
    Console.ReadLine();
}

И добавил консольный журнал в свой асинхронный метод.

Console.WriteLine(ProgressExplorerValue);

Это дало этот вывод.

enter image description here

Я думаю, это ваш желаемый результат.

0 голосов
/ 06 ноября 2018

при выполнении
await Task.Run(() => LoadEntriesInFolder());
вы ожидаете возвращаемое значение метода Run(); и не дожидаетесь завершения задачи.
попробовать
Task.Run(() => LoadEntriesInFolder()).Wait();

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