繁体   English   中英

不等待任务包装同步过程

[英]Task wrap a synchronisation process isn't awaited

我的应用程序 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());await Task.Run(() => LoadEntriesInFolder()); . 当我调试时,它会从这一行跳到下一行,即使LoadEntriesInFolder方法尚未完成也没有中断。

您如何调用 ChargeFolderAsync 方法? 我在 program.cs 中调用它,如下所示。

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

并在您的异步方法中添加了控制台日志。

Console.WriteLine(ProgressExplorerValue);

它给出了这个输出。

在此处输入图片说明

我认为这是您想要的输出。

做的时候
await Task.Run(() => LoadEntriesInFolder());
你在等待Run();的返回值Run(); 方法,直到任务完成。
尝试
Task.Run(() => LoadEntriesInFolder()).Wait();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM