Control.InvokeAsync Метод

Определение

Перегрузки

Имя Описание
InvokeAsync(Action, CancellationToken)

Вызывает указанный синхронный обратный вызов асинхронно в потоке, который владеет дескриптором элемента управления.

InvokeAsync(Func<CancellationToken,ValueTask>, CancellationToken)

Выполняет указанный асинхронный обратный вызов в потоке, который владеет дескриптором элемента управления асинхронно.

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

Вызывает указанный синхронный обратный вызов асинхронно в потоке, который владеет дескриптором элемента управления.

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

Выполняет указанный асинхронный обратный вызов в потоке, которому принадлежит дескриптор элемента управления.

InvokeAsync(Action, CancellationToken)

Исходный код:
Control.cs
Исходный код:
Control.cs
Исходный код:
Control.cs

Вызывает указанный синхронный обратный вызов асинхронно в потоке, который владеет дескриптором элемента управления.

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

Параметры

callback
Action

Синхронное действие для выполнения.

cancellationToken
CancellationToken

Маркер отмены.

Возвращаемое значение

Задача, представляющая асинхронную операцию вызова.

Комментарии

При передаче в этот метод метод возвращается, но обратный CancellationToken вызов по-прежнему будет выполнен. Обратный вызов будет выполняться в потоке пользовательского интерфейса и также блокирует поток пользовательского интерфейса. InvokeAsync В этом случае выполняется только очередь обратного вызова к концу очереди сообщений и немедленно возвращается, но как только обратный вызов будет выполнен, он по-прежнему блокирует поток пользовательского интерфейса в течение времени его выполнения. По этой причине рекомендуется выполнять только короткие операции синхронизации, выполняемые в обратном вызове, например обновление свойства элемента управления или аналогичное.

Если вы хотите выполнить длительную операцию, попробуйте использовать асинхронные обратные вызовы, убедившись, что вы используете перегрузку InvokeAsync(Func<CancellationToken,ValueTask>, CancellationToken) или InvokeAsync<T>(Func<CancellationToken,ValueTask<T>>, CancellationToken).

Применяется к

InvokeAsync(Func<CancellationToken,ValueTask>, CancellationToken)

Исходный код:
Control.cs
Исходный код:
Control.cs
Исходный код:
Control.cs

Выполняет указанный асинхронный обратный вызов в потоке, который владеет дескриптором элемента управления асинхронно.

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

Параметры

callback
Func<CancellationToken,ValueTask>

Асинхронная функция для выполнения, которая принимает CancellationToken и возвращает .ValueTask

cancellationToken
CancellationToken

Маркер отмены.

Возвращаемое значение

Задача, представляющая асинхронную операцию вызова.

Исключения

Дескриптор элемента управления еще не создан.

Комментарии

Обратный вызов будет маршалирован в поток, который владеет дескриптором элемента управления, а затем ожидается. Исключения будут распространяться обратно вызывающей стороне. Кроме того, обратите внимание, что возвращаемая задача не связана с обратным вызовом, а задача, представляющая операцию маршаллинга обратного вызова в поток пользовательского интерфейса. Если необходимо передать обратный вызов, возвращающий вместо не a TaskValueTask, используйте конструктор с помощью ValueTask(Task)конструктора, чтобы создать новый ValueTask объект, который упаковывает исходную задачу. При CancellationToken маршаллинге обратного вызова в поток, которому принадлежит дескриптор элемента управления, и при выполнении обратного вызова будут учитываться оба метода.

Если вы хотите асинхронно выполнить синхронный обратный вызов, используйте перегрузку InvokeAsync<T>(Func<T>, CancellationToken) или перегрузку InvokeAsync(Action, CancellationToken).

Применяется к

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

Исходный код:
Control.cs
Исходный код:
Control.cs
Исходный код:
Control.cs

Вызывает указанный синхронный обратный вызов асинхронно в потоке, который владеет дескриптором элемента управления.

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)

Параметры типа

T

Возвращаемый тип синхронного обратного вызова.

Параметры

callback
Func<T>

Синхронная функция для выполнения.

cancellationToken
CancellationToken

Маркер отмены.

Возвращаемое значение

Task<T>

Задача, представляющая операцию и содержащую результат функции.

Комментарии

При передаче в этот метод метод возвращается, но обратный CancellationToken вызов по-прежнему будет выполнен. Обратный вызов будет выполняться в потоке пользовательского интерфейса и также блокирует поток пользовательского интерфейса. InvokeAsync в этом случае просто помещает обратный вызов в конец очереди сообщений и возвращается немедленно, но как только обратный вызов выполняется, он по-прежнему блокирует пользовательский интерфейс во время его выполнения. По этой причине рекомендуется выполнять только короткие операции синхронизации, выполняемые в обратном вызове, например обновление свойства элемента управления или аналогичное.

Если вы хотите выполнить длительную операцию, попробуйте использовать асинхронные обратные вызовы, которые используются с перегрузками, описанными InvokeAsync ниже.

Важно: Кроме того, обратите внимание, что если вы используете эту перегрузку для передачи обратного вызова, возвращающего Task то, что эта задача не будет ожидаться, но возвращается немедленно и имеет характеристики "задействования и забыть". Если вы хотите, чтобы задача, которую вы передаете, ожидалась, убедитесь, что вы используете перегрузку InvokeAsync(Func<CancellationToken,ValueTask>, CancellationToken) или InvokeAsync<T>(Func<CancellationToken,ValueTask<T>>, CancellationToken).

Применяется к

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

Исходный код:
Control.cs
Исходный код:
Control.cs
Исходный код:
Control.cs

Выполняет указанный асинхронный обратный вызов в потоке, которому принадлежит дескриптор элемента управления.

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)

Параметры типа

T

Тип возврата асинхронного обратного вызова.

Параметры

callback
Func<CancellationToken,ValueTask<T>>

Асинхронная функция для выполнения, которая принимает CancellationToken и возвращает .ValueTask<TResult>

cancellationToken
CancellationToken

Маркер отмены.

Возвращаемое значение

Task<T>

Задача, представляющая операцию и содержащую результат функции типа T.

Исключения

Дескриптор элемента управления еще не создан.

Комментарии

Обратный вызов будет маршалирован в поток, который владеет дескриптором элемента управления, а затем ожидается. Исключения будут распространяться обратно вызывающей стороне. Кроме того, обратите внимание, что возвращаемая задача не связана с обратным вызовом, а задача, представляющая операцию маршаллинга обратного вызова в поток пользовательского интерфейса. Если необходимо передать обратный вызов, возвращающий вместо не a Task<TResult>ValueTask<TResult>, используйте конструктор с помощью ValueTask<TResult>(Task<TResult>)конструктора, чтобы создать новый ValueTask<TResult> объект, который упаковывает исходную задачу. При CancellationToken маршаллинге обратного вызова в поток, которому принадлежит дескриптор элемента управления, и при выполнении обратного вызова будут учитываться оба метода.

Если вы хотите асинхронно выполнить синхронный обратный вызов, используйте перегрузку InvokeAsync<T>(Func<T>, CancellationToken) или перегрузку InvokeAsync(Action, CancellationToken).

Применяется к