【发布时间】: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