JoinableTaskContext 類別
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
可聯結工作可建立於其中和進行互動以避免死結的一般內容。
public ref class JoinableTaskContext : IDisposable, Microsoft::VisualStudio::Threading::IHangReportContributor
public class JoinableTaskContext : IDisposable, Microsoft.VisualStudio.Threading.IHangReportContributor
type JoinableTaskContext = class
interface IHangReportContributor
interface IDisposable
Public Class JoinableTaskContext
Implements IDisposable, IHangReportContributor
- 繼承
-
JoinableTaskContext
- 實作
備註
使用或與 JoinableTasks 互動時,應該嚴格遵循三個規則:1。 如果方法具有特定線程 Apartment 需求, (STA 或 MTA) 它必須:) 具有異步簽章,如果原本未在相容線程上叫用,則異步封送處理至適當的線程。 切換至主線程的建議方法是:
await JoinableTaskFactory.SwitchToMainThreadAsync();
b) 有同步簽章,並在錯誤的線程上呼叫時擲回例外狀況。 特別是,不允許方法同步封送處理工作至另一個線程, (在該工作完成時封鎖) 。 一般而言,應盡可能避免同步區塊。 2. 當已隨附公用 API 的實作必須呼叫異步程式代碼並封鎖完成時,必須遵循這個簡單的模式來執行此動作:
JoinableTaskFactory.Run(async delegate {
await SomeOperationAsync(...);
});
- 如果曾經等候稍早啟動的工作,該工作必須加入。 例如,一項服務會啟動一些稍後可能會同步封鎖的異步工作:
JoinableTask longRunningAsyncWork = JoinableTaskFactory.RunAsync(async delegate {
await SomeOperationAsync(...);
});
然後,異步工作會變成封鎖:
longRunningAsyncWork.Join();
或或許:
await longRunningAsyncWork;
不過請注意,在開始異步操作之後,等候會立即完成時,就不需要這個額外的步驟。
建構函式
JoinableTaskContext() |
初始化 類別的新實例 JoinableTaskContext ,假設目前的線程是主線程,並提供 Current 從另一個線程切換到主線程的方法。 |
JoinableTaskContext(Thread, SynchronizationContext) |
初始化 JoinableTaskContext 類別的新執行個體。 |
屬性
Factory |
取得建立不屬於可聯結工作集合之可聯結工作的 Factory。 |
IsOnMainThread |
取得值,指出呼叫端是否正在主線程上執行。 |
IsWithinJoinableTask |
取得值,指出呼叫端目前是否在可聯結工作的內容中執行。 |
MainThread |
取得可由此內容所建立之工作共用的主執行緒。 |
NoMessagePumpSynchronizationContext |
SynchronizationContext取得 ,套用時會隱藏呼叫線程同步區塊期間可能會執行的任何訊息幫浦。 |
方法
Capture() |
擷取呼叫端的內容,並將其串行化為字元串,此字串適用於應用程式,透過後續呼叫 RunAsync(Func<Task>, String, JoinableTaskCreationOptions)。 |
CreateCollection() |
建立未完成可聯結工作的集合。 |
CreateDefaultFactory() |
建立沒有 JoinableTaskCollection 的 Factory。 |
CreateFactory(JoinableTaskCollection) |
建立會自動將所有已建立工作加入至可一併聯結之集合的可聯結工作 Factory。 |
Dispose() |
可聯結工作可建立於其中和進行互動以避免死結的一般內容。 |
Dispose(Boolean) |
處置此實例所持有的Managed和Unmanaged資源。 |
GetHangReport() |
提供用於懸置狀況報表的資料。 |
IsMainThreadBlocked() |
取得值,指出呼叫端完成時是否封鎖主線程。 |
IsMainThreadMaybeBlocked() |
取得非常可能的值,指出呼叫端完成時是否封鎖主線程。 UI 線程封鎖工作剛啟動且尚未遭到封鎖,或剛移除相依性鏈結時,較不精確。 不過,不同於 IsMainThreadBlocked(),此實作在高爭用案例中是無鎖定的,而且較快。 |
OnFalseHangDetected(TimeSpan, Guid) |
當先前的停止回應報告為誤判警示時叫用。 |
OnHangDetected(TimeSpan, Int32, Guid) |
當可疑發生與主線程有關的停止回應時叫用。 |
SuppressRelevance() |
隱藏與呼叫端關聯的所有 JoinableTask,直到傳回的值已處置為止。 |
明確介面實作
IHangReportContributor.GetHangReport() |
提供用於懸置狀況報表的資料。 |
適用於
執行緒安全性
此類型適用於所有成員的安全線程。