FUNÇÃO ASSINCRONA

 Tópico anterior Próximo tópico Novo tópico

FUNÇÃO ASSINCRONA

VB.NET

 Compartilhe  Compartilhe  Compartilhe
#477567 - 02/11/2017 23:26:32

NOWLIGHTS
SUMARE
Cadast. em:Abril/2011


Boa noite galera...

Tava dando uma olhada sobre métodos assíncronos e tentei utilizar na minha função;

   Public Shared Async Function SearchAca() As Task(Of List(Of Produtos_ACA))
        Dim SQL As String = "SELECT * FROM produtos_aca Where IdCliente='" & GetCliente.ID_M & "'"
        Dim Result = New List(Of Produtos_ACA)
        Try
            Using Conex As New MySqlConnection(GetSQL.SERVIDOR)
                Using Cmd As New MySqlCommand(SQL, Conex)
                    Try
                        Await Conex.OpenAsync
                    Catch ex As Exception
                        Erro.ShowMe("Erro inesperado ao tentar abrir conexão com o servidor :/", ex.ToString, True)
                    End Try
                    Using Ler As MySqlDataReader = Await Cmd.ExecuteReaderAsync
                        While Await Ler.ReadAsync
                            Result.Add(New Produtos_ACA(Ler.Item("Id"), Ler.Item("IdCliente"), Ler.Item("IdProduto")))
                        End While
                    End Using
                End Using
            End Using
        Catch ex As Exception
            Erro.ShowMe("Erro inesperado", ex.ToString,, "Erro em: MetodoNotificar.SearchACA")
        End Try
        Return (Result)
    End Function


E tentei utilizar a lista assim;

   Dim LisAc = SearchAca()
        For Each I As Produtos_ACA In LisAc

        Next


E aparece: Expressão é do tipo "Task(Of List(Of Produtos_ACA))", que não é um tipo de coleção.

Porque?


__________________________________
- Everyone has a chance

#477570 - 03/11/2017 03:33:26

JABA
CABO FRIO
Cadast. em:Agosto/2005


Citação:
Dim LisAc = SearchAca()


Quando você declara o "dim" desta maneira, a plataforma tenta descobrir qual o tipo pra você dinamicamente. Como o tipo de retorno do seu método tá declarado como uma task, então a variável LisAc passará a ser uma task também, por isso gera um erro ao fazer loop, pois ela não é uma coleção.

Não sei se vai funcionar, mas tente declarar explicitamente, assim:

Dim LisAc as List = SearchAca()






_______________________________________________________________________________________________

Se a alma ou espírito são imateriais, como eles fazem para se localizarem quando o corpo está em movimento?



Resposta escolhida #477571 - 03/11/2017 08:23:03

OCELOT
SOROCABA
Cadast. em:Março/2012


Sua função SearchAca é assíncrona com retorno de valor, então para poder usar corretamente ela a função que a chama também deve ser assíncrona e deve usar
Dim LisAc = Await SearchAca()




#477572 - 03/11/2017 11:19:10

KERPLUNK
RIO GRANDE DO SUL
Cadast. em:Junho/2009


Membro da equipe
Outra coisa importante, métodos assíncronos no connector MySQL são relativamente novos, De acordo com a documentação, você precisa usar .NET Framework 4.0 ou superior e versão 6.9(UI!!!) ou superior do conector

_______________________________________________________________________
Gostaria de ter seu sistema Desktop "traduzido" para uma interface web? Podemos conversar...
Virei Oráculo!
The end is nigh, be ready for the nukes!


#477575 - 03/11/2017 16:38:09

NOWLIGHTS
SUMARE
Cadast. em:Abril/2011


Funcionou...

Seria interessante, colocar métodos assíncronos em todas as minhas funções da classe? Seria uma boa prática? (levando em consideração a quantidade grande de dados)

__________________________________
- Everyone has a chance

#477576 - 03/11/2017 16:47:48

KERPLUNK
RIO GRANDE DO SUL
Cadast. em:Junho/2009


Membro da equipe
Se for necessário o uso de métodos assíncronos, sim. Mas não é "boa prática" necessariamente. Métodos assíncronos são usados quando processamento assíncrono é necessário. Não são "melhores" ou "piores" que métodos síncronos. Você não terá nenhum ganho de performance, se é o que você está querendo...

_______________________________________________________________________
Gostaria de ter seu sistema Desktop "traduzido" para uma interface web? Podemos conversar...
Virei Oráculo!
The end is nigh, be ready for the nukes!


#477577 - 03/11/2017 16:50:06

NOWLIGHTS
SUMARE
Cadast. em:Abril/2011


Mas não travar a tela, já não seria um "ganho de performance"

__________________________________
- Everyone has a chance

#477579 - 03/11/2017 17:23:00

KERPLUNK
RIO GRANDE DO SUL
Cadast. em:Junho/2009


Membro da equipe
Um bom motivo para usar aplicações Web, onde esse tipo de coisa é bem diferente. Você pode ter um controle(componente) sendo carregado em background de modo assíncrono, assim como vários outros, tudo ao mesmo tempo.

_______________________________________________________________________
Gostaria de ter seu sistema Desktop "traduzido" para uma interface web? Podemos conversar...
Virei Oráculo!
The end is nigh, be ready for the nukes!


 Tópico anterior Próximo tópico Novo tópico


Tópico encerrado, respostas não sao permitidas
Encerrado por NOWLIGHTS em 03/11/2017 23:14:34