Bonjour à tous,
Aujourd'hui nous utilisons beginInvoke pour charger nos données depuis la base de données en asynchrone.
Cela permet de ne pas freezer nos applications Winform et de lancer des events du back vers le front (GUI) pour gérer l'affichage d'une barre de progression.
On se pose la question d'utiliser le pattern async / await.
Cependant je me rends compte que si j'utilise des méthodes "async", tout devient "async" pour les utiliser.
Est ce que vous confirmez ?
Notamment un event de type private void btSearch_Click(object sender, EventArgs e) devra être réécrit private async void btSearch_Click(object sender, EventArgs e).
Ensuite j'ai cette tâche asynchrone "getAsync", qui appelle la méthode "get", et dans la méthode get j'appelle une méthode synchrone "getListBo".
Visiblement malgré le fait que la tâche soit marquée "async" elle se bloque sur la méthode synchrone.
Est-ce normal ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 // - Méthode asynchrone basée sur BeginInvoke public void beginGetClients(IGTMFilter gtmClientFilter) { // -- Création du délégué et lancement de la // -- méthode synchrone // ------------------------------------------ getClientsDelegate getClientsDlg = new getClientsDelegate(get); getClientsDlg.BeginInvoke(gtmClientFilter, null, null); } // -- Tâche asynchrone basée sur le patter async / await public async Task getAsync(IGTMFilter filter, TaskScheduler uiScheduler, CancellationTokenSource cancellationTokenSrc) { await Task.Factory.StartNew( () => get(filter), cancellationTokenSrc == null ? CancellationToken.None : cancellationTokenSrc.Token, TaskCreationOptions.None, uiScheduler); } // -- Méthode synchrone protected override List<Client> get(IFilter Filter, DbConnection dbConnection) { // -- Initialisation de la liste des clients // ----------------------------------------- return getListBO(selectQuery); }
Partager