2010-02-04 4 views
0

В настоящее время я использую ThreadPool.QueueUserWorkItem в приложении Asp.Net. В основном пользователь загружает файл, используя форму с помощью элемента управления FileUpload. Файл может занимать довольно много времени, чтобы обрабатывать, что вызывало тайм-аут для пользователя, а также делает пользовательский интерфейс непригодным для использования во время обработки загрузки. Так я думал, что я просто называю мой метод импорта, как это:ThreadPool.QueueUserWorkItem - странное поведение (Asp.Net)

ThreadPool.QueueUserWorkItem(this.NameOfMyImportMethod); 

Данные о том, что метод импорта должен работать на уже установленной в качестве переменных класса, когда строится класс Import (я не выполнение импортной работы в коде позади!).

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

Я гарантирую, что у меня есть все исключения внутри метода импорта.

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

Любые идеи относительно того, что может происходить здесь?

Спасибо за помощь!

ответ

1

Это немного длинный (особенно если вы видите проблему в своей среде разработки, где не должно быть много конкуренции за эти потоки), но у вас может быть поток потоков потока и/или заходят в тупик, ожидая их появления.

Вы можете проверить, вставляя что-то вроде следующего в вашей странице, возможно, сразу после массового обслуживания делегата:

int workerThreads; 
int maxWorkerThreads; 
int completionPortThreads; 
int maxCompletionPortThreads; 

ThreadPool.GetAvailableThreads(out workerThreads, out completionPortThreads); 
ThreadPool.GetMaxThreads(out maxWorkerThreads, out maxCompletionPortThreads); 

System.Diagnostics.Debug.WriteLine(string.Format("There are {0} of {1} worker threads available.\r\n", workerThreads, maxWorkerThreads)); 

Вы используете ThreadPool в другом месте на странице?

0

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