İlk ve büyük hata olarak görünen duruma tahmini bir vaka analizi yapalım ve çözümleyelim.
Mesela bir şehirler listeniz var. Bunu X bir kaynaktan populate ettiğinizi var sayalım. Bu işlem asenkron değil, senkron olarak çalışıyor olsun.
Doldurma işlemi tamamlanıncaya kadar, yazılım ve bağıl olarak sistem kaynaklarınız sadece o işlemi yapmaya çalışacağından artık kararsız hale düşecektir.
Tam da bu esnada, henüz işlem tamamlanmadan, o liste sanki tamamlanmış gibi bir de o listeden silme işlemi başlatmaya çalışırsanız, zaten devam eden bir işlem varken ve ikinci işlemin başlamaması gerekirken 2. işleme zorluyorsunuz demektir.
Bu nedenle, 2. işlem de 1. işleme bağlı olarak kararsız duruma düştü. Eğer yazılımcı olarak bu durumu öngörmediyseniz, bu durum 2 net sonuç doğurur.
1. işlem henüz bitmedi (ongoing)
2. işlem, 1. işlem bitmediği için başlayamadı ve bu şekilde sistem kaynakları tükendi.
Eklediğiniz mesajlardan anlaşılan bu ve bu durumdan kaçınmalısınız.
Eğer bir thread başlıyorsa, o thread'in sonucu bir veri üretecek ve bu veri, 2. başka bir thread'in çalışmasına engel olacaksa o halde 1. thread bitmeden, 2. thread başlamamalı.
Eğer bu mutlak bir gereklilikse, o halde Asenkron çalıştırmayı denemelisiniz. Var olan kadarının üzerinde çalışmak gibi.
Ancak bana göre, bu durum, işletim sistemlerinin çalışma prensiplerine de aykırıdır. Yani yazılımınız, Para piyasalarındaki önemli bir durumda hareket etmiyor ise, o halde bu durum gerekmedikçe kullanmamak gerek.