Si no está convencido aún de una tarea de fondo, sólo tratar de acceder a un elemento de interfaz gráfica de usuario desde el interior de una tarea como:
public async Task<int> ProcessStuff_Async()
{
while(true)
{
label1.Text = "processing next item";
para obtener la excepción de tiempo de ejecución:
Cross- operación de subproceso no válida: Control 'etiqueta1' accedido desde un subproceso que no sea el subproceso en el que se creó.
al igual que con los buenos viejos hilos de fondo regulares.
Hay información en MSDN docs (a partir de 2017 :-), por ejemplo:
La mejor manera de manejar esto ... es comenzar un hilo fondo cuales hace el trabajo usando de tareas .Run y aguardan su resultado. Esto permitirá que la interfaz de usuario se sienta suave mientras se realiza el trabajo.
Este doc incluso tiene una sección What happens under the covers
.
+1 No pensé en esto - buen enfoque :-) – Steffen
Tengo un problema donde todas mis tareas se ejecutan en el hilo de llamada. Pegué esa línea precisa de código en mi proyecto e informa "falso". ¿Sabes por qué podría ser? Estoy usando .NET 4.0. –
De acuerdo con este hilo http://stackoverflow.com/questions/7889746/creating-threads-task-factory-startnew-vs-new-thread, no tiene garantizado un hilo de fondo al iniciar una tarea, pero debe hacerlo si utiliza TaskCreationOptions.LongRunning. Estoy usando esa opción y todavía no está creando un hilo de fondo. ¿Lo que da? –