Processi asincroni in competizione per l'area di uscita

2

Inserisci l'URL nella stringa dell'indirizzo del tuo browser. Ci vuole molto tempo per comparire nell'area cliente. Sei annoiato e digita un altro indirizzo e fai clic su entra. Quale pagina verrà visualizzata nel browser, prima o seconda?

Un problema simile si solleva quando si aggiorna la struttura del documento mentre si digita l'editor. In Eclipse hai una finestra struttura separata, che dovrebbe essere sincronizzata con il documento. Viene aggiornato ogni volta che si digita. Hai modificato il tuo documento, l'aggiornamento viene avviato di nuovo analisi o generazione. Nel frattempo, continui a digitare, iniziando un'altra analisi. Al termine del parser, aggiorna la finestra Struttura. Cosa succede se la prima analisi termina dopo la prima? La struttura obsoleta prevale!

Come risolvi questo problema nella programmazione asincrona? Dovresti controllare se la tua azione è obsoleta nella continuazione o annullare tutte le azioni in corso prima di avviarne di nuove?

    
posta Val 22.02.2017 - 10:40
fonte

1 risposta

4

A seconda di quanto sia costosa l'azione sulle risorse, puoi scegliere tra annullare esplicitamente o controllare dopo il fatto.

Il controllo dopo il completamento è il più semplice da implementare, nel gestore di completamento verifica se è ancora valido.

Fare l'annullamento è un po 'più complicato in quanto è necessario mantenere un handle per l'attività e inviarlo un segnale di annullamento. Quindi, nel compito stesso è necessario verificare se è stato cancellato regolarmente e poi interrompere e ripulire se necessario.

    
risposta data 22.02.2017 - 10:45
fonte

Leggi altre domande sui tag