Как вы поддерживаете параметры PowerShell -WhatIf & -Confirm в командлете, который вызывает другие командлеты?

await, как вы выяснили, блокирует ответ от возврата пользователю до его завершения. Обычно вы просто помещаете фоновый рисунок в другой поток и устанавливаете его «стрелять и забывать», не ожидая, однако в ASP.NET IIS отключит AppDomains, которые не используются, и Task.Run не сообщает IIS, что ваш фон thread "использует AppDomain", поэтому ваш фоновый поток может быть завершен с помощью Thread.Abort() во время отключения AppDomain.

Если вы используете .NET 4.5.2 или новее, вы можете сказать, что у IIS есть фон что вам нужно оставаться в живых через QueueBackgroundWorkItem . Вы бы использовали его так:

   public ActionResult ProcessRec()
   {
        HostingEnvironment.QueueBackgroundWorkItem(waitTimer);
        return RedirectToAction("Index", "Home");
   }

   public void waitTimer(CancellationToken token)
   {
        Thread.Sleep(10000);
   }
   //You also could do
   public async Task waitTimer2(CancellationToken token)
   {
        await Task.Delay(10000);
   }

Теперь это не гарантирует, что IIS не выключит ваш домен приложения, но он знает, что вы находитесь посреди чего-то, и просит больше времени, когда он (вы получаете до 90 дополнительных секунд после того, как по умолчанию запускается завершение завершения всех заданных по умолчанию элементов фона).

Для получения дополнительной информации прочтите этот блог MSDN представляя его.

22
задан Rob Kielty 7 May 2013 в 13:53
поделиться