Если вы делаете вызов асинхронно, то это происходит в фоновом потоке.
Фоновые потоки не могут остановить закрытие приложения и прекращаются при закрытии приложения.Может случиться так, что ОС сообщает вашему приложению, что оно выключает ПК, ваше приложение пытается сделать свой асинхронный запрос, но ему не удается это сделать, потому что фоновый поток, который его выполняет, завершается при закрытии приложения.Это не обязательно будет происходить постоянно, но определенно произойдет, потому что там нет ничего, чтобы гарантировать, что поток поддерживается.
Что вам нужно сделать, это явно создать новый поток и использовать его для синхронного вызова вашей службы.,Создавая поток вручную, вы можете установить его в качестве основного потока;потоки переднего плана не позволят приложению завершить работу, пока они не будут завершены.итак:
public void OnShutdown()
{
var executionThread=new Thread(RunWcfMethod);
executionThread.IsBackgroundThread=false;
executionThread.Start();
}
private void RunWcfMethod()
{
var serviceClient=new ShutdownServiceClient();
serviceClient.NotifyServerOfShutdownSyncronously();
}