JoinableTaskFactory.SwitchToMainThreadAsync 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
多載
| 名稱 | Description |
|---|---|
| SwitchToMainThreadAsync(CancellationToken) |
獲得一個等待的項目,其續寫會在主線程中執行,以減少死局與重新進入的問題。 |
| SwitchToMainThreadAsync(Boolean, CancellationToken) |
取得一個 waitable,其續行會在該實例初始化的同步上下文中執行,以減輕死結與重入。 |
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
若標記被取消,會立即排程執行緒池執行緒的續接,並使續接拋出 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();
}
當擁有 JoinableTaskContext 權以 nullSynchronizationContext建立時,此方法不影響,呼叫者將繼續執行原始執行緒。
適用於
SwitchToMainThreadAsync(Boolean, CancellationToken)
取得一個 waitable,其續行會在該實例初始化的同步上下文中執行,以減輕死結與重入。
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
若標記被取消,會立即排程執行緒池執行緒的續接,並使續接拋出 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();
}