Control.InvokeAsync Método

Definição

Sobrecargas

Name Description
InvokeAsync(Action, CancellationToken)

Invoca o callback síncrono especificado de forma assíncrona no thread que detém o handle do controlo.

InvokeAsync(Func<CancellationToken,ValueTask>, CancellationToken)

Executa o callback assíncrono especificado na thread que detém o handle do controlo de forma assíncrona.

InvokeAsync<T>(Func<T>, CancellationToken)

Invoca o callback síncrono especificado de forma assíncrona no thread que detém o handle do controlo.

InvokeAsync<T>(Func<CancellationToken,ValueTask<T>>, CancellationToken)

Executa o callback assíncrono especificado na thread que detém o handle do controlo.

InvokeAsync(Action, CancellationToken)

Origem:
Control.cs
Origem:
Control.cs
Origem:
Control.cs

Invoca o callback síncrono especificado de forma assíncrona no thread que detém o handle do controlo.

public System.Threading.Tasks.Task InvokeAsync(Action callback, System.Threading.CancellationToken cancellationToken = default);
member this.InvokeAsync : Action * System.Threading.CancellationToken -> System.Threading.Tasks.Task
Public Function InvokeAsync (callback As Action, Optional cancellationToken As CancellationToken = Nothing) As Task

Parâmetros

callback
Action

A ação síncrona a executar.

cancellationToken
CancellationToken

O token de cancelamento.

Devoluções

Uma tarefa que representa a operação de invocação assíncrona.

Observações

Quando passa a CancellationToken para este método, o método retorna, mas o callback continua a ser executado. O callback vai correr no thread da interface e também vai bloquear o thread da interface. InvokeAsync neste caso, está apenas a enfileirar o callback para o fim da fila de mensagens e retorna imediatamente, mas assim que o callback é executado, continua a bloquear o thread da interface durante o tempo em que está a correr. Por esta razão, recomenda-se executar apenas operações curtas de sincronização no callback, como atualizar a propriedade de um controlo ou similar.

Se quiser executar uma operação de longa duração, considere usar callbacks assíncronos, certificando-se de que utiliza ou a sobrecarga InvokeAsync(Func<CancellationToken,ValueTask>, CancellationToken) ou InvokeAsync<T>(Func<CancellationToken,ValueTask<T>>, CancellationToken).

Aplica-se a

InvokeAsync(Func<CancellationToken,ValueTask>, CancellationToken)

Origem:
Control.cs
Origem:
Control.cs
Origem:
Control.cs

Executa o callback assíncrono especificado na thread que detém o handle do controlo de forma assíncrona.

public System.Threading.Tasks.Task InvokeAsync(Func<System.Threading.CancellationToken,System.Threading.Tasks.ValueTask> callback, System.Threading.CancellationToken cancellationToken = default);
member this.InvokeAsync : Func<System.Threading.CancellationToken, System.Threading.Tasks.ValueTask> * System.Threading.CancellationToken -> System.Threading.Tasks.Task
Public Function InvokeAsync (callback As Func(Of CancellationToken, ValueTask), Optional cancellationToken As CancellationToken = Nothing) As Task

Parâmetros

callback
Func<CancellationToken,ValueTask>

A função assíncrona para executar, que toma um CancellationToken e devolve um ValueTask.

cancellationToken
CancellationToken

O token de cancelamento.

Devoluções

Uma tarefa que representa a operação de invocação assíncrona.

Exceções

A alavanca do comando ainda não foi criada.

Observações

O callback será direcionado para o thread que detém o handle do controlo, e depois aguardado. As exceções serão propagadas de volta ao chamador. Note também que a tarefa devolvida não é a tarefa associada ao callback, mas sim uma tarefa que representa a operação de marshalling do callback para o thread da interface. Se precisares de passar um callback que retorna um Task em vez de um ValueTask, usa o ValueTask(Task)construtor 's para criar um novo ValueTask que envolve a tarefa original. Estes CancellationToken serão tidos em conta tanto ao organizar o callback para o thread que detém o handle do controlo, como ao executar o callback.

Se quiser executar de forma assíncrona um callback síncrono, use a sobrecarga InvokeAsync<T>(Func<T>, CancellationToken) ou a sobrecarga InvokeAsync(Action, CancellationToken).

Aplica-se a

InvokeAsync<T>(Func<T>, CancellationToken)

Origem:
Control.cs
Origem:
Control.cs
Origem:
Control.cs

Invoca o callback síncrono especificado de forma assíncrona no thread que detém o handle do controlo.

public System.Threading.Tasks.Task<T> InvokeAsync<T>(Func<T> callback, System.Threading.CancellationToken cancellationToken = default);
member this.InvokeAsync : Func<'T> * System.Threading.CancellationToken -> System.Threading.Tasks.Task<'T>
Public Function InvokeAsync(Of T) (callback As Func(Of T), Optional cancellationToken As CancellationToken = Nothing) As Task(Of T)

Parâmetros de Tipo Genérico

T

O tipo de retorno do callback síncrono.

Parâmetros

callback
Func<T>

A função síncrona a executar.

cancellationToken
CancellationToken

O token de cancelamento.

Devoluções

Task<T>

Uma tarefa que representa a operação e contém o resultado da função.

Observações

Quando passa a CancellationToken para este método, o método retorna, mas o callback continua a ser executado. O callback vai correr no thread da interface e também vai bloquear o thread da interface. Neste caso, o InvokeAsync está apenas a enfileirar o callback para o fim da fila de mensagens e devolve imediatamente, mas assim que o callback é executado, continua a bloquear a interface durante o tempo em que está a correr. Por esta razão, recomenda-se executar apenas operações curtas de sincronização no callback, como atualizar a propriedade de um controlo ou similar.

Se quiser executar uma operação de longa duração, considere usar callbacks assíncronos, que utiliza com as sobrecargas descritas InvokeAsync abaixo.

Importante: Note também que, se usar esta sobrecarga para passar um callback que devolve, Task esta Tarefa NÃO será aguardada mas retornará imediatamente e tem as características de um "engage-and-forget". Se quiser que a tarefa que passou seja aguardada, certifique-se de usar ou a sobrecarga InvokeAsync(Func<CancellationToken,ValueTask>, CancellationToken) ou InvokeAsync<T>(Func<CancellationToken,ValueTask<T>>, CancellationToken).

Aplica-se a

InvokeAsync<T>(Func<CancellationToken,ValueTask<T>>, CancellationToken)

Origem:
Control.cs
Origem:
Control.cs
Origem:
Control.cs

Executa o callback assíncrono especificado na thread que detém o handle do controlo.

public System.Threading.Tasks.Task<T> InvokeAsync<T>(Func<System.Threading.CancellationToken,System.Threading.Tasks.ValueTask<T>> callback, System.Threading.CancellationToken cancellationToken = default);
member this.InvokeAsync : Func<System.Threading.CancellationToken, System.Threading.Tasks.ValueTask<'T>> * System.Threading.CancellationToken -> System.Threading.Tasks.Task<'T>
Public Function InvokeAsync(Of T) (callback As Func(Of CancellationToken, ValueTask(Of T)), Optional cancellationToken As CancellationToken = Nothing) As Task(Of T)

Parâmetros de Tipo Genérico

T

O tipo de retorno do callback assíncrono.

Parâmetros

callback
Func<CancellationToken,ValueTask<T>>

A função assíncrona para executar, que toma um CancellationToken e devolve um ValueTask<TResult>.

cancellationToken
CancellationToken

O token de cancelamento.

Devoluções

Task<T>

Uma tarefa que representa a operação e contém o resultado da função de tipo T.

Exceções

A alavanca do comando ainda não foi criada.

Observações

O callback será direcionado para o thread que detém o handle do controlo, e depois será aguardado. As exceções serão propagadas de volta ao chamador. Note também que a tarefa devolvida não é a tarefa associada ao callback, mas sim uma tarefa que representa a operação de marshalling do callback para o thread da interface. Se precisares de passar um callback que retorna um Task<TResult> em vez de um ValueTask<TResult>, usa o ValueTask<TResult>(Task<TResult>)construtor 's para criar um novo ValueTask<TResult> que envolve a tarefa original. Estes CancellationToken serão tidos em conta tanto ao organizar o callback para o thread que detém o handle do controlo, como ao executar o callback.

Se quiser executar de forma assíncrona um callback síncrono, use a sobrecarga InvokeAsync<T>(Func<T>, CancellationToken) ou a sobrecarga InvokeAsync(Action, CancellationToken).

Aplica-se a