Coroutine'lerle Async/Await
Coroutine'leri askıya alıp sürdüren async() ve await() yardımcıları oluşturun.
Coroutine'lerle Async/Await, CoddyKit'te ücretsiz bir Lua Academy dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Lua Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Lua Academy kursu toplamda 4 dersten oluşur.
Asenkron/Bekleme Yaklaşımı
Asenkron/bekleme, asenkron işlemlerin eşzamanlı kod gibi göründüğü bir programlama modelidir. Lua'da korutinler, bunu doğal biçimde uygulamak için yield/resume mekanizmasını sağlar.
await İşlevi
await(future) mevcut korutini yield yapar ve gelecek nesnesi tamamlandığında onu devam ettiren bir geri çağrı saklar.
local function await(future)
local co = coroutine.running()
future.onComplete = function(result)
coroutine.resume(co, result)
end
return coroutine.yield()
endAsenkron İşlev Sarmalayıcısı
async(fn) bir işlevi, zamanlayıcının yönettiği yeni bir korutinde çalışacak şekilde sarar.
local function async(fn)
return function(...)
local co = coroutine.create(fn)
local ok, err = coroutine.resume(co, ...)
if not ok then print("async error:", err) end
return co
end
endBasit Gelecek Nesnesi
Bir gelecek nesnesi bekleyen bir sonucu temsil eder. Daha sonra complete edin; bekleyen tüm korutinleri devam ettirir.
local function newFuture()
local f = {done=false, value=nil, waiters={}}
f.complete = function(val)
f.done = true; f.value = val
for _, cb in ipairs(f.waiters) do cb(val) end
end
f.andThen = function(cb)
if f.done then cb(f.value)
else f.waiters[#f.waiters+1] = cb end
end
return f
endUygulamada await
Dahili olarak yield yapan ve devam eden, sıralı görünümlü asenkron kod yazın.
local fetchData = async(function(url)
local result = await(httpGet(url)) -- yields
local parsed = await(parseJSON(result)) -- yields again
print("Got:", parsed.name)
end)
fetchData("http://example.com/api")Hata Yayılımı
Hatayı gelecek nesnesi üzerinden aktarın: işlem başarısız olursa korutini bir hata göstergesi ve hata iletisiyle devam ettirin.
local function awaitSafe(future)
local co = coroutine.running()
future.onComplete = function(ok, result)
coroutine.resume(co, ok, result)
end
return coroutine.yield()
endSıralı ve Paralel
Bağımlı işlemler için await ifadesini sırayla kullanın. Bağımsız işlemler için her iki korutini başlatın ve bir birleştirme gelecek nesnesini bekleyin.
Promise.all Kalıbı
Sayaç gelecek nesnesini kullanarak birden çok asenkron görevi çalıştırın ve hepsinin tamamlanmasını bekleyin.
local function all(futures)
local results = {}
local count = #futures
local combined = newFuture()
for i, f in ipairs(futures) do
f:andThen(function(v)
results[i] = v
count = count - 1
if count == 0 then combined.complete(results) end
end)
end
return combined
endİptal
Korutini devam ettirmeden önce iptal edildi olarak işaretleyerek iptal uygulayın. Korutin işareti denetler ve erken döner.
G/Ç ile Tümleştirme
Engellemeyen G/Ç ile tümleştirin: bir G/Ç çağrısı engellenecekse yield yapın ve veri kullanılabilir olduğunda resume edecek bir geri çağrı kaydedin.
Geri Çağrı Tarzıyla Karşılaştırma
Korutinlerle asenkron/bekleme, iç içe geri çağrılardan çok daha okunabilirdir. pcall ile hata işleme de geri çağrı hata parametrelerinden daha temizdir.
Asenkron/Bekleme Sorusu
Korutin tabanlı bir asenkron sistemde await(future) ne yapar?
Özet: Korutinlerle Asenkron/Bekleme
Asenkron işlemleri, tamamlandığında yield yapılmış korutini resume eden gelecek nesneleriyle sararak korutinlerle asenkron/beklemeyi uygulayın. Sonuç, aslında engellemeyen ancak sıralı görünümlü koddur.
Sıkça Sorulan Sorular
“Coroutine'lerle Async/Await” dersi ücretsiz mi?
Evet — “Coroutine'lerle Async/Await” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Lua Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Lua Academy kursu toplamda 4 dersten oluşur.
“Coroutine'lerle Async/Await” dersinde ne öğreneceğim?
Coroutine'leri askıya alıp sürdüren async() ve await() yardımcıları oluşturun. Lua Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Lua Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Lua Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.
“Coroutine'lerle Async/Await” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Lua Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Lua Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Basit Bir Olay Döngüsü Oluşturma
- Coroutine'lerle Async/Await
- Promise Benzeri Örüntüler
- luasocket ile Engellemesiz G/Ç