Dil

JoinableTaskContext Sınıf

Tanım

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(...);
});
  1. 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.