Sobes.tech
Junior — Middle

Hansı şərtlərdə main.sync istifadəsi iş parçalarının qarşılıqlı bloklanmasına səbəb olmayacaq?

sobes.tech Süni İntellekt

AI-dan cavab

DispatchQueue.main.sync istifadəsi yalnız əsas axından çağırılmadıqda qarşılıqlı kilidlənməyə (deadlock) səbəb olmayacaq. Əgər main.sync-i əsas axından çağırırsınızsa, bu axın blokun tamamlanmasını gözləyəcək, bu isə başlaya bilməz, çünki əsas axın artıq məşğuldur — bu deadlock-ə səbəb olur.

Təhlükəsiz istifadə nümunəsi:

DispatchQueue.global().async {
    DispatchQueue.main.sync {
        // UI yeniləməsi
    }
}

Burada, main.sync çağırışı fon axınından həyata keçirilir, ona görə də bloklama baş vermir. Əsas qayda — heç vaxt DispatchQueue.main.sync-i əsas axından çağırmayın.