dangerousThreadingAPI MDA

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

Belirtiler

Uygulama yanıt vermiyor. Sistem veya uygulama verileri geçici olarak veya uygulama kapatıldıktan sonra bile öngörülemeyen 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.

Nedeni

bir iş parçacığı yöntemi kullanılarak 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 almak güvenli olduğunda bunu belirlemenin bir yolu yoktur. İş parçacığının askıya alınması verilerin bozulmasına veya sabitlerin bozulmasına neden olabilir. Bir iş parçacığı askıya alınmış duruma yerleştirilip yöntemi kullanılarak Resume hiçbir zaman devam ettirilmemesi durumunda uygulama yanıt vermeyi durdurabilir ve uygulama verilerine zarar verebilir. Bu yöntemler kullanımdan kaldırıldı olarak işaretlendi.

Eşitleme ilkelleri hedef iş parçacığı tarafından tutulursa, askıya alma sırasında tutulur. Bu, başka bir iş parçacığının ( örneğin , gerçekleştiren Suspendiş parçacığı) ilkel ü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ında işbirliği için , , ReaderWriterLockveya MutexC# lock deyimi gibi Monitoreş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ığı oluşturma 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.