Aracılığıyla paylaş


dangerousThreadingAPI MDA

Not

Bu makale .NET Framework'e özgüdür. .NET 6 ve sonraki sürümleri de dahil olmak üzere daha yeni .NET uygulamaları için geçerli değildir.

Yönetilen dangerousThreadingAPI hata ayıklama yardımcısı (MDA), yöntem geçerli iş parçacığı dışında bir iş parçacığında çağrıldığında Thread.Suspend etkinleştirilir.

Belirtiler

Bir uygulama yanıt vermiyor. Sistem veya uygulama verileri geçici olarak veya uygulama kapatıldıktan sonra bile öngörülemez bir durumda bırakılabilir. Bazı işlemler beklendiği gibi tamamlanmaz.

Belirtiler, sorunun doğasında bulunan rastgelelik nedeniyle büyük ölçüde farklılık gösterebilir.

Neden

İş parçacığı, yöntemini kullanarak Suspend başka bir iş parçacığı tarafından zaman uyumsuz olarak askıya alınır. İşlemin ortasında olabilecek başka bir iş parçacığını askıya alma işleminin ne zaman güvenli olduğunu belirlemenin hiçbir yolu yoktur. İş parçacığının askıya alınması verilerin bozulmasına veya sabitlerin bozulmasına neden olabilir. Bir iş parçacığının askıya alınmış duruma yerleştirilmesi ve yöntemi kullanılarak Resume hiçbir zaman sürdürülmemesi durumunda uygulama yanıt vermeyi durdurabilir ve uygulama verilerine zarar verebilir. Bu yöntemler eski olarak işaretlendi.

Eşitleme ilkelleri hedef iş parçacığı tarafından tutulursa, bunlar askıya alma sırasında tutulur. Bu, başka bir iş parçacığının, örneğin öğesini gerçekleştiren iş parçacığının Suspendilkel üzerinde bir kilit almaya çalışması gibi kilitlenmelere yol açabilir. Bu durumda, sorun bir kilitlenme olarak kendini gösterir.

Çözüm

ve Resumekullanımını gerektiren tasarımlardan Suspend kaçının. İş parçacıkları arasındaki işbirliği için, , Monitor, ReaderWriterLock, Mutexveya C# lock deyimi gibi Lockeşitleme temel öğelerini kullanın. Bu yöntemleri kullanmanız gerekiyorsa, zaman penceresini azaltın ve iş parçacığı askıya alınmış durumdayken yürütülen kod miktarını en aza indirin.

Çalışma Zamanı üzerindeki etkisi

Bu MDA'nın CLR üzerinde hiçbir etkisi yoktur. Yalnızca tehlikeli iş parçacığı işlemleriyle ilgili verileri bildirir.

Çıktı

MDA, etkinleştirilmesine neden olan tehlikeli iş parçacığı oluşturma yöntemini tanımlar.

Yapılandırma

<mdaConfig>
  <assistants>
    <dangerousThreadingAPI />
  </assistants>
</mdaConfig>

Örnek

Aşağıdaki kod örneği, yönteminin Suspend etkinleştirilmesine neden olan bir çağrıyı dangerousThreadingAPIgösterir.

using System.Threading;
void FireMda()
{
Thread t = new Thread(delegate() { Thread.Sleep(1000); });
    t.Start();
    // The following line activates the MDA.
    t.Suspend();
    t.Resume();
    t.Join();
}

Ayrıca bkz.