0Pricing
Lua Academy · Ders

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()
end

Asenkron İş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
end

Basit 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
end

Uygulamada 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()
end

Sı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

  1. Basit Bir Olay Döngüsü Oluşturma
  2. Coroutine'lerle Async/Await
  3. Promise Benzeri Örüntüler
  4. luasocket ile Engellemesiz G/Ç
← Lua Academy Sayfasına Dön