【问题标题】:Unreachable code after await return from function等待从函数返回后无法访问的代码
【发布时间】:2019-03-26 13:58:49
【问题描述】:

我想从函数做等待返回

我已经尝试过使用 GetAwaiter().GetResult() 我也尝试过从函数更高和更低的无法访问的代码中移动返回。在较低的情况下,我只是在所有计算后得到结果。如果代码较高,则代码较低的标记为无法访问且不起作用。

 public async Task<Guid?> Start(IServiceProvider serviceProvider, FileDTO[] files, Guid? guidOfCurrentService)
    {
        var serviceRepository = serviceProvider.GetService<IServiceRepository>();
        if (!serviceRepository.CheckService(guidOfCurrentService))
        {
            if (guidOfCurrentService == null)
            {
                guidOfCurrentService = Guid.NewGuid();
            }
            var service = serviceProvider.GetService<ICompressingService>();
            serviceRepository.StartService(guidOfCurrentService);
            _serviceResolver.Add(guidOfCurrentService, service);
            return _serviceResolver.FirstOrDefault(x => x.Value == service).Key;
            try
            {
                await Task.Run(() => service.CompressFiles(files));
            }
            catch
            {
                serviceRepository.EndService(guidOfCurrentService);
                return null;
            }
            serviceRepository.EndService(guidOfCurrentService);
        }
        else
        {
            return null;
        }
    }

我怎样才能从这个函数中获得等待返回: _serviceResolver.FirstOrDefault(x => x.Value == service).Key; 并继续尝试/捕获等功能?谢谢

【问题讨论】:

  • 很简单,把return _serviceResolver ....放在函数的最后,不然下面的都不会执行
  • 您可以使用Task.FromResult(_serviceResolver.FirstOrDefault(x => x.Value == service).Ke),但请记住您的函数不是真正异步运行的,请参阅:stackoverflow.com/a/17119610/249687跨度>

标签: c# async-await return-value


【解决方案1】:

return 表示函数始终结束。我建议将调用结果存储到 _serviceResolver... 并在 try-catch-block 之后返回,如下所示:

var _result = _serviceResolver.FirstOrDefault(x => x.Value == service).Key;
try
{
    await Task.Run(() => service.CompressFiles(files));
}
catch
{
    serviceRepository.EndService(guidOfCurrentService);
    return null;
}
serviceRepository.EndService(guidOfCurrentService);
return _result;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-06
    相关资源
    最近更新 更多