Изучение запросов IAsyncResult и потоков в C # - PullRequest
0 голосов
/ 13 октября 2011

У меня есть следующие строки кода в кнопке отправки при загрузке файла.Таким образом, запрос запускается и выполняется в фоновом режиме и сообщает пользователю, что файл обрабатывается.

// Prepare the query string
string arguments = string.Format(
    "?guid={0}&sessionid={1}&seqstring={2}&torrstring={3}", 
    Server.HtmlEncode(_userGuid), Server.HtmlEncode(_guid), 
    Server.HtmlEncode(seqString.ToString()), 
    Server.HtmlEncode(TorRString.ToString()));

// Initialize web request
req = (HttpWebRequest)WebRequest.Create(
    string.Format("{0}{1}", pageUrl.ToString(), arguments));
req.Method = "GET";

// Start the asynchronous request.
IAsyncResult result = (IAsyncResult)req.BeginGetResponse(
    new AsyncCallback(RespCallback), null);

// this line impliments the timeout, if there is a timeout, the callback 
// fires and the request becomes aborted
// ThreadPool.RegisterWaitForSingleObject(
// result.AsyncWaitHandle, 
// new WaitOrTimerCallback(TimeoutCallback), 
// null, DefaultTimeout, true);

Пользователь получает код, который отвечает на файл, но иногда я думаю, что поток умирает и база данныхне обновляется, поэтому кажется, что файл никогда не заканчивает обработку.Как мне узнать, работает ли поток?Пользователь отправляет свой код, и если я делаю результат. IsCompleted;он говорит, что результат равен нулю.

Ответы [ 2 ]

1 голос
/ 13 октября 2011

Не могли бы вы отредактировать свое сообщение и включить весь обработчик нажатий кнопок и методы RespCallback и TimeoutCallback?Это облегчит ваш вопрос.Нам нужно знать, ожидает ли ваша страница завершения WebRequest или нет.

Я предполагаю, что ваша страница не ждет, но ваш код работает большую часть времени.Если это так, WebRequest будет работать асинхронно с вашим обычным жизненным циклом страницы.Если страница завершается до WebRequest, IIS может перезапустить пул приложений, и ваш фоновый запрос будет уничтожен.Это будет работать большую часть времени, потому что IIS не часто выбирает переработку, и поэтому WebRequest будет продолжаться до завершения.

0 голосов
/ 13 октября 2011

Возможно, вы захотите взглянуть на этот вопрос, но я бы задал вопрос, почему у вас есть ноль в конце BeginGetResponse вместо возврата RequestState. Кроме того, вы уверены, что ваш вызов базы данных где-то не проходит, и вы обвиняете не ту часть вашей программы?

Асинхронная загрузка с использованием HttpWebRequest

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