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ı 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();
}
Ayrıca bkz.
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin