290 messaggi dal 08 luglio 2008
Ciao a tutti,
ho un problema con la chiamata di una fuzione asincrona in postback usando il metodo ExecuteRegisteredAsyncTasks.

In pratica durante il postback devo chiamare una funzione X che è async e quindi ho pensato di registrarla facendo questo nel page load ovviamente controllando di essere in fase postback:

 Page.RegisterAsyncTask(new PageAsyncTask(funzioneX));
 Page.ExecuteRegisteredAsyncTasks();



e ovviamente la mia funzioneX è scritta cosi:

public async Task funzioneX ()
        {
//chiamo un altra funzione async...
var response = await altrafunzione();
return response;

}


Al termine della chiamata della funzioneX io vorrei che .net facesse un redirect verso una altra pagina...ma ho scoperto che i metodi async chiamati con ExecuteRegisteredAsyncTasks() vengono eseguiti poco prima dell'evento PreRender_Complete. Ed io ingenuamente posizionavo il redirect subito dopo l'ExecuteRegisteredAsyncTasks...

Quindi ora non so bene come fare per essere sicuro che il redirect avvenga esattamente al termine del metodo asincrono...dovrei intanto capire se c'è un modo per sapere che il metodo funzioneX sia effettivamente terminato con esito positivo. E poi reindirizzare su nuova pagina.

Grazie a tutti
333 messaggi dal 05 novembre 2012
Ciao,

curiosità... da dove nasce l'esigenza di eseguire codice in asincrono?

In ogni caso, il parametro endHandler della classe PageAsyncTask non può fare al caso tuo?

PageAsyncTask Constructors

/Ciao

Alessio
290 messaggi dal 08 luglio 2008
Ciao Alessio,
il mio metodo asincrono nasce dalla necessità di dover chiamare 2 web api di una piattaforma esterna che potrebbe non essere celere nel dare una risposta, e siccome la pagina oltre a questa parte, fa una serie di altre elaborazioni slegate da questa chiamata, volevo ottimizzare usando tecniche async. Almeno credo sia questa la strada più corretta.

Io al momento ho risolto cosi (anche se ho letto in rete che usare Task.Run per queste cose richiede piu risorse del necessario)
Task taskA = Task.Run(() => funzioneX());

//faccio altre elaborazioni...

taskA.Wait();

//reindirizzo verso una nuova pagina

Grazie
Modificato da webbondo il 12 febbraio 2019 15:13 -
333 messaggi dal 05 novembre 2012
Ciao,

dai un occhio qui...C# Async Tips & Tricks

Comunque, tornando al tuo metodo iniziale, se guardi l'esempio in questa pagina PageAsyncTask Class, esegue 3 task in parallelo ed al termine aggiorna il contenuto dello span

Ciao
Modificato da scioCoder il 12 febbraio 2019 16:52 -

Alessio
290 messaggi dal 08 luglio 2008
Grazie mille, mi pare di capire che la soluzione che ho trovato per aggirare il problema in realtà non è asincrona affatto..

quindi tornando alla mia prima domanda...come posso chiamare dei metodi usando ExecuteRegisteredAsyncTasks e poi fare un redirect su nuova pagina assicurandomi che i metodi asincroni siano stati eseguiti?

;)
333 messaggi dal 05 novembre 2012
Ciao,

Hai guardato questo esempio ?

Eventualmente, per avere una visione più dettagliata dell'argomento guarda qui Using Asynchronous Methods in ASP.NET 4.5

/Ciao
Modificato da scioCoder il 12 febbraio 2019 20:45 -

Alessio

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.