У меня есть следующее Main в приложении net core 2.2, используя c # level 7.3
public static async Task Main(string[] args)
{
_logger.TraceMethodBegins(nameof(Main));
AppDomain.CurrentDomain.UnhandledException += CurrentDomainOnUnhandledException;
TaskScheduler.UnobservedTaskException += TaskSchedulerOnUnobservedTaskException;
using (ServiceFactory.Instance)
{
try
{
Parser.Default.ParseArguments<Options>(args)
.WithParsed(async o =>
{
IWtgValuesCalculator wtgValuesCalculator = ServiceFactory.Instance.Kernel.Get<IWtgValuesCalculator>();
await wtgValuesCalculator.Calculate(o.StartDate, o.EndDate, o.FacilityName);
})
.WithNotParsed(async o =>
{
//Code enters over here
IWtgValuesCalculator wtgValuesCalculator = ServiceFactory.Instance.Kernel.Get<IWtgValuesCalculator>();
await wtgValuesCalculator.Calculate(null, null, null);
});
}
catch (Exception e)
{
_logger.Fatal(e, e.Message);
}
}
//And jump here immediately without awaiting
_logger.TraceMethodEnds(nameof(Main));
}
Метод возвращается немедленно, не ожидая await wtgValuesCalculator.Calculate()
Я проверил, что исключений нет, если я изменю его на все методы синхронизации, программа будет работать, как и ожидалось. Кроме того, вызов wtgValuesCalculator.Calculate(o.StartDate, o.EndDate, o.FacilityName).GetAwaiter().GetResult();
заставит его работать правильно. Коллега сказал мне, что он где-то читал, что асинхронные методы в Main могут иметь проблемы, потому что mscorlib не был полностью загружен, но я не могу найти информацию об этом. Кто-нибудь может пролить свет на это?
С уважением.