Come è possibile creare un elenco di attività da eseguire in modo sincrono sullo stesso thread?

1

Sto scrivendo un programma che controlla alcuni componenti hardware tramite una porta seriale. Il programma eseguirà varie funzioni in base all'input dell'utente. Ho bisogno di un modo per accodare queste attività ed eseguirle in modo sincrono sullo stesso thread. Devo anche essere in grado di cancellarli e monitorare il loro stato.

Quindi stavo pensando che potrei usare le attività e combinarle insieme usando Task.ContinueWith. Sarà sufficiente per forzarli sullo stesso thread?

L'altro modo in cui posso farlo è creare un thread ed eseguire un ciclo continuo che controlla una coda. La coda avrebbe trattenuto i delegati sui metodi che dovevo eseguire. Questo sembra come reinventare la ruota però.

    
posta TheColonel26 23.09.2016 - 18:58
fonte

1 risposta

3

Puoi utilizzare il Task.RunSynchronously Method .

Ordinarily, tasks are executed asynchronously on a thread pool thread and do not block the calling thread. Tasks executed by calling the RunSynchronously() method are associated with the current TaskScheduler and are run on the calling thread. If the target scheduler does not support running this task on the calling thread, the task will be scheduled for execution on the scheduler, and the calling thread will block until the task has completed execution.

.ContinueWith() viene eseguito in modo asincrono. Anche se la prossima attività non viene avviata fino al completamento della precedente attività, non è garantito che si sarà sullo stesso thread.

Puoi anche fare questo:

Task.Factory.StartNew(() => { First(); Second(); });

o questo:

void MyCompositeTask()
{
  var result = First();
  Second(result);
}
Task.Factory.StartNew(() => MyCompositeTask());

entrambi resteranno sullo stesso thread.

Ulteriori letture
Operazione di continuazione nello stesso thread del precedente

    
risposta data 23.09.2016 - 19:36
fonte

Leggi altre domande sui tag