İlk örnek geçerli F # kodu değil, çünkü let!
yalnızca hesaplama ifadesinin hemen içinde kullanılabilir. Örneğinizde, onu sıradan bir işlevde kullanıyorsunuz - gövdesi bir hesaplama ifadesi değil, bu nedenle let!
bu konumda izin verilmiyor. - o zaman sadece kullanmak gerekir
MailboxProcessor.Start(fun inbox -> async {
let rec loop bugs = async {
let! msg = inbox.Receive()
let res = //something
return! loop res }
return! loop []})
Siz de snippet'te dış async { .. }
blok tutabilir:
Eğer
async
içindeki
loop
fonksiyonun gövdesini sarmak gerekirdi de geçerli kılmak için
return!
,
loop
işlevini çağırmak yerine, yalnızca döndürmek yerine (ancak bunun dışında önemli bir fark yoktur). I
return!
yerine
do!
kullanılan
Not - return!
akımı vücudun geri kalan iptal edilebilir, yani bir kuyruk-çağrı temsil ettiği bu aslında, bir farktır. do!
kullanırsanız, async yığınta bir yığın çerçevesi gibi bir şey ayırır, bu nedenle özyinelemeli döngü işlevinde do!
kullanılması belleği sızdırıyor.
Yardım edemiyorum ama neden işe yarayıp başlamadığını neden görmediklerini merak ediyorum. – ChaosPandion
Ve işte eve döndüğümde, tüm uygulamalarımın sanal bellekten çıkıp sistemimle düştüğünü merak ettim! Teşekkürler Tomas! –
@ChaosPandion Çok iyi bir nokta, başka bir nedenden dolayı derleme yapmayan bir kodla oynuyordum ve baktığım şeyin işe yarayacağını düşünmekteyim - soruyu oylamakta özgürsünüz ama Tomas'ın cevabı zaten oldukça yararlıydı. –