Остановить процесс асинхронного запуска навсегда? - PullRequest
3 голосов
/ 07 декабря 2011

Пытаясь лучше понять потоки Async.

Приложение AC # содержит следующий код:

IAsyncResult myResult = cmd.BeginExecuteNonQuery(); //start
while (!myResult.IsCompleted)
{
      myResult.AsyncWaitHandle.WaitOne(65000);
}
cmd.EndExecuteNonQuery(myResult); //end

Насколько я понимаю, программа будет ждать, пока myResult вернет true (IsComplete).

Когда myResult никогда не возвращает true (т. Е. Cmd выполняется вечно), истекает ли тайм-аут aSync?Или он просто продолжит работать?Как мне остановить его вечную работу?

Ответы [ 2 ]

3 голосов
/ 07 декабря 2011

Лучший способ не допустить его вечной работы - указать установленный вами предел времени ожидания.

Например:

DateTime dtStart = DateTime.Now;
const int TIMEOUT_SECONDS = 120;

while (!myResult.IsCompleted)
{
      if (DateTime.Now.Subtract(dtStart).TotalSeconds > TIMEOUT_SECONDS)
      {
           // Cleanup and bail 
      }
      myResult.AsyncWaitHandle.WaitOne(65000);
}
1 голос
/ 07 декабря 2011

Документация MSDN кажется довольно однозначной;в документации говорится, что метод WaitOne будет ожидать возврата сигнала (ваш целевой метод что-то делает и завершается) или пока не истечет время.Вы можете заставить его ждать вечно (Timespan.Infinite или -1) или возвращать немедленно (0). Ответ

@ компетентный_техник иллюстрирует это - поток заблокирует ваш промежуток времени, затем, если общее время прошло,Вы можете выйти из цикла while, иначе подождать еще немного.

Infact, вам, вероятно, даже не нужен цикл while - если вы установите промежуток времени, которым вы довольны и который истек, поток возобновится, и вымогу решить, что делать дальше.

Так что, чтобы ответить на ваш вопрос, да, асинхронный тайм-аут будет зависеть от этого параметра.

Время от времени мне приходится возвращаться и читать Джо руководство Албахари по созданию потоков, чтобы вспомнить, как все это работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...