c# multithreading windows-phone-7 windows-phone-8 threadpool

c# - ¿Thread.Sleep afecta a ThreadPool?



multithreading windows-phone-7 (3)

Necesito controlar un hilo para mis propios fines: calcular, esperar, informar, etc.
En todos los demás casos, estoy usando ThreadPool o TaskEx.

En el depurador, cuando estoy haciendo Thread.Sleep() , noto que algunas partes de la interfaz de usuario son cada vez menos responsables. Sin embargo, sin depurador parece funcionar bien.

La pregunta es: si estoy creando un Thread and Sleep() , ¿puede afectar a ThreadPool / Tasks?

EDITAR: aquí hay ejemplos de código:

Un lugar aleatorio en mi aplicación:

ThreadPool.QueueUserWorkItem((state) => { LoadImageSource(imageUri, imageSourceRef); });

Otro lugar aleatorio en mi aplicación:

var parsedResult = await TaskEx.Run(() => JsonConvert.DeserializeObject<PocoProductItem>(resultString, Constants.JsonSerializerSettings));

Mi ConcurrentQueue (modificado, el original está tomado de aquí ):

Creación de hilo para las necesidades de la cola:

public void Process(T request, bool Async = true, bool isRecurssive = false) { if (processThread == null || !processThread.IsAlive) { processThread = new Thread(ProcessQueue); processThread.Name = "Process thread @ " + Environment.TickCount; processThread.Start(); }

Si una de las Tareas informa algunos problemas de red, quiero que este subproceso espere un poco

if (ProcessRequest(requestToProcess, true)) { RequestQueue.Dequeue(); } else { DoWhenTaskReturnedFalse(); Thread.Sleep(3000); }

Entonces, la pregunta una vez más: puede Thread.Sleep(3000); , llamado desde un new Thread(ProcessQueue); , afecta a ThreadPool o TaskEx.Run ()?



Suponiendo que el hilo que pones en reposo se obtuvo del grupo de subprocesos, seguramente afecta al grupo de subprocesos. Si dices explícitamente que el hilo debe dormir, no puede ser reutilizado por el grupo de hilos durante este tiempo. Esto puede provocar que el grupo de subprocesos genere nuevos subprocesos si hay algunos trabajos pendientes de programación. Crear un nuevo hilo siempre es caro: los hilos son recursos del sistema.

Sin embargo, puede observar el método Task.Delay (junto con async y await ) que suspende la ejecución del código de una manera más inteligente, lo que permite reutilizar el hilo durante la espera. Consulte este artículo Thread.Sleep vs. Task.Delay .