JoinableTaskFactory.SwitchToMainThreadAsync Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Перегрузки
| Имя | Описание |
|---|---|
| SwitchToMainThreadAsync(CancellationToken) |
Получает ожидаемое значение, продолжение которого выполняется в основном потоке, таким образом, чтобы устранить взаимоблокировки и повторное выполнение. |
| SwitchToMainThreadAsync(Boolean, CancellationToken) |
Получает ожидаемое значение, продолжение которого выполняется в контексте синхронизации, с которым был инициализирован этот экземпляр, таким образом, чтобы устранить взаимоблокировки и повторное выполнение. |
SwitchToMainThreadAsync(CancellationToken)
Получает ожидаемое значение, продолжение которого выполняется в основном потоке, таким образом, чтобы устранить взаимоблокировки и повторное выполнение.
public Microsoft.VisualStudio.Threading.JoinableTaskFactory.MainThreadAwaitable SwitchToMainThreadAsync(System.Threading.CancellationToken cancellationToken = default);
member this.SwitchToMainThreadAsync : System.Threading.CancellationToken -> Microsoft.VisualStudio.Threading.JoinableTaskFactory.MainThreadAwaitable
Public Function SwitchToMainThreadAsync (Optional cancellationToken As CancellationToken = Nothing) As JoinableTaskFactory.MainThreadAwaitable
Параметры
- cancellationToken
- CancellationToken
Токен, отмена которого немедленно запланируется продолжение в потоке threadpool и приведет к тому OperationCanceledException, что продолжение вызывается, даже если вызывающий объект уже находится в основном потоке.
Возвращаемое значение
Ожидание.
Исключения
Возвращается в ожидающий вызывающий объект cancellationToken , если он отменен, даже если вызывающий объект уже находится в основном потоке.
Комментарии
private async Task SomeOperationAsync() {
// on the caller's thread.
await DoAsync();
// Now switch to a threadpool thread explicitly.
await TaskScheduler.Default;
// Now switch to the Main thread to talk to some STA object.
await this.JobContext.SwitchToMainThreadAsync();
STAService.DoSomething();
}
При создании nullSynchronizationContextсобственного JoinableTaskContext метода этот метод не влияет, и вызывающий объект продолжит выполнение в исходном потоке.
Применяется к
SwitchToMainThreadAsync(Boolean, CancellationToken)
Получает ожидаемое значение, продолжение которого выполняется в контексте синхронизации, с которым был инициализирован этот экземпляр, таким образом, чтобы устранить взаимоблокировки и повторное выполнение.
public Microsoft.VisualStudio.Threading.JoinableTaskFactory.MainThreadAwaitable SwitchToMainThreadAsync(bool alwaysYield, System.Threading.CancellationToken cancellationToken = default);
member this.SwitchToMainThreadAsync : bool * System.Threading.CancellationToken -> Microsoft.VisualStudio.Threading.JoinableTaskFactory.MainThreadAwaitable
Public Function SwitchToMainThreadAsync (alwaysYield As Boolean, Optional cancellationToken As CancellationToken = Nothing) As JoinableTaskFactory.MainThreadAwaitable
Параметры
- alwaysYield
- Boolean
Значение, указывающее, должен ли вызывающий объект давать, даже если он уже выполняется в основном потоке.
- cancellationToken
- CancellationToken
Токен, отмена которого немедленно запланируется продолжение в потоке threadpool и приведет к тому OperationCanceledException, что продолжение вызывается, даже если вызывающий объект уже находится в основном потоке.
Возвращаемое значение
Ожидание.
Исключения
Возвращается в ожидающий вызывающий объект cancellationToken , если он отменен, даже если вызывающий объект уже находится в основном потоке.
Комментарии
private async Task SomeOperationAsync()
{
// This first part can be on the caller's thread, whatever that is.
DoSomething();
// Now switch to the Main thread to talk to some STA object.
// Supposing it is also important to *not* do this step on our caller's callstack,
// be sure we yield even if we're on the UI thread.
await this.JoinableTaskFactory.SwitchToMainThreadAsync(alwaysYield: true);
STAService.DoSomething();
}