0

I want to do awaitable return from function

I've already tried to use GetAwaiter().GetResult() also i've tried move return from function higher and lower unreachable code. In case of lower i just get result after all computing. In case of higher the code lower marks as unreachable and does not work.

 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;
        }
    }

how can i get the awaitable return from this function: _serviceResolver.FirstOrDefault(x => x.Value == service).Key; and keep doing try/catch and etc functional? thank you

Giacomo
  • 229
  • 1
  • 3
  • 11
  • 2
    very simple put `return _serviceResolver ....` at the end of the function, or else everything below it will not execute – styx Mar 26 '19 at 14:01
  • you could useTask.FromResult(_serviceResolver.FirstOrDefault(x => x.Value == service).Ke), but remember that your function is not running true async, see: https://stackoverflow.com/a/17119610/249687 – Miguel Marques Mar 26 '19 at 17:20

1 Answers1

1

A return means always the end of the function. I would suggest to store the result of the call to _serviceResolver... and return it after the try-catch-block like this:

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;
Fischermaen
  • 12,238
  • 2
  • 39
  • 56