Закройте консольное приложение после вызова webapi, не дожидаясь результата

#c# #asp.net #rest #asp.net-web-api

#c# #asp.net #отдых #asp.net-web-api

Вопрос:

Я пытаюсь вызвать webapi из консольного приложения (которое запускается планировщиком задач Windows). Я не хочу, чтобы мое консольное приложение ожидало результата от api.Я просто хочу вызвать api, инициировать его и выйти из консольного приложения.

Мой код консольного приложения

 public static void InvokeSisService(string feature)
        {
            var serviceurl = ConfigurationManager.AppSettings["AppServiceURL"];
            var controllerPath= ConfigurationManager.AppSettings["ControllerPath"];

            var client = new HttpClient { BaseAddress = new Uri(serviceurl) };

            controllerPath= controllerPath  "?feature="   feature;
            client.DefaultRequestHeaders.Accept.Clear();
            client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));


            //client.PostAsync(smsservicepath, null);
           // var temp=client.GetAsync(smsservicepath).Resu<
            var response = Task.Run(() => client.GetAsync(controllerPath)).Resu<
}
  

Мой webapi вызывается, но он ожидал вывода.Как мне выйти из консольного приложения после вызова api.

Код Webapi

   [HttpGet]
    [Route("ProcessService")]
    public HttpResponseMessage ProcessService([FromUri] string feature)
    {
    }
  

Комментарии:

1. Вы можете прочитать эту статью blog.stephencleary.com/2014/06/fire-and-forget-on-asp-net.html от Стивена Клири

2. Хорошая статья, но речь идет о запуске и забывании с сервера, а не с клиента.

Ответ №1:

Я уверен, что вы хотите убедиться, что ответ был получен, поэтому измените

   var response = Task.Run(() => client.GetAsync(controllerPath)).Resu<
  

Для:

   using (var response = await client.GetAsync(controllerPath, HttpCompletionOption.ResponseHeadersRead))
  

Это будет удалено после получения заголовков ответа. Это НЕ включает обработку ошибок — вероятно, вам следует добавить обработку ошибок в микс, чтобы убедиться, что вы получаете правильный код ответа, прежде чем двигаться дальше — но это зависит от вас.

Комментарии:

1. К вашему сведению, я не хочу перехватывать ответ от API … я хочу просто вызвать и выйти из своей программы.

2. Затем выньте await и исчезните!

Ответ №2:

var response = Task.Run(() => клиент.GetAsync(controllerPath)).Результат;

с помощью свойства «Result» вы ожидаете ответа.