JoinableTaskContext Sınıf
Tanım
Önemli
Bazı bilgiler ürünün ön sürümüyle ilgilidir ve sürüm öncesinde önemli değişiklikler yapılmış olabilir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.
Kilitlenmeleri önlemek için birleştirilebilir görevlerin oluşturulabileceği ve etkileşime geçebileceği ortak bir bağlam.
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
- Devralma
-
JoinableTaskContext
- Uygulamalar
Açıklamalar
JoinableTasks kullanılırken veya bunlarla etkileşim kurarken kesinlikle uyulması gereken üç kural vardır: 1. Bir yöntemin belirli iş parçacığı dairesi gereksinimleri (STA veya MTA) varsa şunlardan biri de olmalıdır: a) Zaman uyumsuz bir imzaya sahip olmalıdır ve özgün olarak uyumlu bir iş parçacığında çağrılmazsa uygun iş parçacığına zaman uyumsuz olarak sıralayın. Ana iş parçacığına geçmenin önerilen yolu:
await JoinableTaskFactory.SwitchToMainThreadAsync();
b) Zaman uyumlu bir imzaya sahip olun ve yanlış iş parçacığında çağrıldığında bir özel durum oluştur. Özellikle, hiçbir yöntemin işi başka bir iş parçacığına zaman uyumlu bir şekilde hazırlamasına (bu iş yapılırken engelleme) izin verilmez. Genel olarak zaman uyumlu bloklar mümkün olduğunda önlenmelidir. 2. Zaten gönderilen bir genel API'nin bir uygulamasının tamamlanması için zaman uyumsuz kodu ve bloğu çağırması gerektiğinde, bunu şu basit deseni izleyerek yapmalıdır:
JoinableTaskFactory.Run(async delegate {
await SomeOperationAsync(...);
});
- Daha önce başlatılan çalışmayı bekliyorsanız, bu çalışma Birleştirilmiş olmalıdır. Örneğin, bir hizmet daha sonra zaman uyumlu olarak engelleyici hale gelebilecek zaman uyumsuz bir çalışma başlatır:
JoinableTask longRunningAsyncWork = JoinableTaskFactory.RunAsync(async delegate {
await SomeOperationAsync(...);
});
Daha sonra zaman uyumsuz çalışma engelleyici hale gelir:
longRunningAsyncWork.Join();
veya belki:
await longRunningAsyncWork;
Ancak, zaman uyumsuz bir işlem başlatıldıktan hemen sonra beklerken bu ek adımın gerekli olmadığını unutmayın.
Oluşturucular
| Name | Description |
|---|---|
| JoinableTaskContext() |
Geçerli iş parçacığının JoinableTaskContext ana iş parçacığı olduğunu varsayarak sınıfın yeni bir örneğini başlatır ve Current başka bir iş parçacığından ana iş parçacığına geçiş yapma araçlarını sağlar. |
| JoinableTaskContext(Thread, SynchronizationContext) |
JoinableTaskContext sınıfının yeni bir örneğini başlatır. |
Özellikler
| Name | Description |
|---|---|
| Factory |
Birleştirilebilir görev koleksiyonuna ait olmayan birleştirilebilir görevler oluşturan fabrikayı alır. |
| IsNoOpContext |
Bu örneğin herhangi bir ana iş parçacığıyla ilişkilendirilip ilişkilendirilmediğini belirten bir değer alır (örneğin, ile CreateNoOpContext()oluşturulur). |
| IsOnMainThread |
Çağıranın ana iş parçacığında yürütülüyor olup olmadığını gösteren bir değer alır. |
| IsWithinJoinableTask |
Çağıranın şu anda birleştirilebilir görev bağlamında çalışıp çalışmadığını belirten bir değer alır. |
| MainThread |
Bu bağlam tarafından oluşturulan görevler tarafından paylaşılabilen ana iş parçacığını alır. |
| NoMessagePumpSynchronizationContext |
Uygulandığında, çağıran iş parçacığının zaman uyumlu blokları sırasında çalışabilecek tüm ileti pompalarını gizleyen bir SynchronizationContext alır. |
Yöntemler
| Name | Description |
|---|---|
| Capture() |
Çağıranın bağlamını yakalar ve sonraki çağrısı RunAsync(Func<Task>, String, JoinableTaskCreationOptions)aracılığıyla uygulamaya uygun bir dize olarak serileştirir. |
| CreateCollection() |
Uçuş içi birleştirilebilir görevler için bir koleksiyon oluşturur. |
| CreateDefaultFactory() |
olmadan JoinableTaskCollectionbir fabrika oluşturur. |
| CreateFactory(JoinableTaskCollection) |
Oluşturulan tüm görevleri birlikte birleştirilebilen bir koleksiyona otomatik olarak ekleyen birleştirilebilir görev fabrikası oluşturur. |
| CreateNoOpContext() |
çağrısında no-op için yapılandırılmış sınıfının yeni bir örneğini JoinableTaskContextSwitchToMainThreadAsync(CancellationToken)başlatır. |
| Dispose() |
Kilitlenmeleri önlemek için birleştirilebilir görevlerin oluşturulabileceği ve etkileşime geçebileceği ortak bir bağlam. |
| Dispose(Boolean) |
Bu örnek tarafından tutulan yönetilen ve yönetilmeyen kaynakları atar. |
| GetHangReport() |
Askıda kalma raporu için verilere katkıda bulunur. |
| IsMainThreadBlocked() |
Çağıranın tamamlanması için ana iş parçacığının engellenip engellenmediğini belirten bir değer alır. |
| IsMainThreadMaybeBlocked() |
Çağıranın tamamlanması için ana iş parçacığının engellenip engellenmediği büyük olasılıkla bir değer alır. UI iş parçacığı engelleme görevi yeni başladığında ve henüz engellenmediğinde veya bağımlılık zinciri yeni kaldırıldığında daha az doğru olur. Ancak, aksine IsMainThreadBlocked(), bu uygulama yüksek çekişme senaryolarında kilitsiz ve daha hızlıdır. |
| OnFalseHangDetected(TimeSpan, Guid) |
Önceki bir askıda kalma raporu yanlış alarm olduğunda çağrılır. |
| OnHangDetected(TimeSpan, Int32, Guid) |
Ana iş parçacığıyla ilgili bir askıda kalma oluştuğundan şüphelenildiğinde çağrılır. |
| SuppressRelevance() |
Döndürülen değer atılana kadar çağıranın ilişkili olduğu JoinableTask değerlerini gizler. |
Belirtik Arabirim Kullanımları
| Name | Description |
|---|---|
| IHangReportContributor.GetHangReport() |
Askıda kalma raporu için verilere katkıda bulunur. |
Şunlara uygulanır
İş Parçacığı Güvenliği
Bu tür, tüm üyeler için iş parçacığı güvenlidir.