// // GET: /Home/ // В данном контроллере метод IndexAsync будет выполнен потоком из пула потоков IIS // Во время выполнения метода IndexAsync будет запущено несколько асинхронных задач. // Когда все асинхронные задачи завершат работу в отдельном потоке // будет запущен метод IndexCompleted, который вернет ответ клиенту. // В данном случае поток из пула IIS будет блокирован минимальное время и сможет обработать большее // количество входящих запросов. public void IndexAsync() { ServicesModel model = new ServicesModel(); NewsClient newsClient = new NewsClient(); WeatherClient weatherClient = new WeatherClient(); AsyncManager.Parameters["model"] = model; model.AddMessage("IndexAsync запущен"); AsyncManager.OutstandingOperations.Increment(); // указываем, что появляется новая асинхронная задача. (счетчик +1) newsClient.BeginGetNews(ar => { model.AddMessage("Выполнение задачи получения новостей"); model.News = newsClient.EndGetNews(ar); AsyncManager.OutstandingOperations.Decrement(); // указываем, что асинхронная задача завершена. (счетчик -1) }); AsyncManager.OutstandingOperations.Increment(); // указываем, что появляется новая асинхронная задача. (счетчик +1) weatherClient.BeginGetTempereture(ar => { model.AddMessage("Выполнение задачи получения температуры"); model.Weather = weatherClient.EndGetWeatherInfo(ar); AsyncManager.OutstandingOperations.Decrement(); // указываем, что асинхронная задача завершена. (счетчик -1) }); }