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ı dangerousThreadingAPI
gö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();
}