Недоступный код после ожидаемого возврата из функции - PullRequest
0 голосов
/ 26 марта 2019

Я хочу сделать ожидаемый возврат из функции

Я уже пытался использовать 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; и продолжать делать try / catch и т. д. функциональными? спасибо

1 Ответ

1 голос
/ 26 марта 2019

A return означает всегда конец функции. Я бы предложил сохранить результат вызова в _serviceResolver... и вернуть его после блока 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;
...