C# 等待函数返回后无法访问的代码

C# 等待函数返回后无法访问的代码,c#,async-await,return-value,C#,Async Await,Return Value,我想做等待返回功能 我已经尝试使用GetAwaiter().GetResult() 此外,我还尝试将函数返回移到较高和较低的不可访问代码。在较低的情况下,我只是得到结果后,所有的计算。在代码较高的情况下,较低的标记为不可访问且不起作用 public async Task<Guid?> Start(IServiceProvider serviceProvider, FileDTO[] files, Guid? guidOfCurrentService) { v

我想做等待返回功能

我已经尝试使用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;
        }
    }
公共异步任务启动(IServiceProvider服务提供程序,FileDTO[]文件,Guid?guidOfCurrentService)
{
var serviceRepository=serviceProvider.GetService();
if(!serviceRepository.CheckService(guidOfCurrentService))
{
if(guidOfCurrentService==null)
{
guidOfCurrentService=Guid.NewGuid();
}
var service=serviceProvider.GetService();
serviceRepository.StartService(guidOfCurrentService);
_添加(guidOfCurrentService,service);
返回_servicesolver.FirstOrDefault(x=>x.Value==service).Key;
尝试
{
等待任务。运行(()=>service.CompressFiles(文件));
}
抓住
{
EndService(guidOfCurrentService);
返回null;
}
EndService(guidOfCurrentService);
}
其他的
{
返回null;
}
}
如何从该函数中获取等待的返回: _servicesolver.FirstOrDefault(x=>x.Value==service.Key;
并继续尝试/捕获等功能?谢谢

A
返回
表示函数始终结束。我建议存储调用
\u servicesolver…
的结果,并在try-catch块后返回,如下所示:

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;

非常简单的将
返回_servicesolver…
放在函数末尾,否则它下面的所有内容都将无法执行您可以使用task.FromResult(_servicesolver.FirstOrDefault(x=>x.Value==service.Ke)),但请记住,您的函数没有运行真正的异步,请参阅: