تنفيذ Goroutine على Windows: استكشاف أخطاء الفشل الصامت وإصلاحها
يُظهر اختبار بسيط يتضمن goroutines سلوكًا غير متوقع على Windows، حيث لا يتم إنتاج الإخراج المتوقع . تنشأ المشكلة لأن الوظيفة الرئيسية لا تنتظر اكتمال goroutine قبل الإنهاء.
Go Await
عند تشغيل goroutine باستخدام الكلمة الأساسية "go"، يتم تنفيذه بالتزامن مع الوظيفة الرئيسية. ومع ذلك، لا يتوقف تنفيذ الوظيفة الرئيسية مؤقتًا وينتظر اكتمال goroutines التي تم استدعاؤها. وبالتالي، يتم خروج الوظيفة الرئيسية، مما قد يؤدي إلى ترك goroutine غير مجدولة.
التدابير العلاجية
للتأكد من أن goroutine لديه الفرصة لتنفيذ وطباعة مخرجاته، فإن الوظيفة الرئيسية يجب تعديل الوظيفة للانتظار لبعض الوقت. يمكن تحقيق ذلك باستخدام حزمة "الوقت" ووظيفة "السكون". من خلال إدخال وقت النوم، تمنح الوظيفة الرئيسية goroutine فرصة للتشغيل وإنتاج المخرجات قبل الإنهاء.الكود المعدل
الكود المعدل التالي يحل المشكلة عن طريق إضافة وقت نوم مدته 10 ثوانٍ إلى نهاية الوظيفة الرئيسية:package main
import (
"fmt"
"time"
)
func test() {
fmt.Println("test")
}
func main() {
go test()
time.Sleep(10 * time.Second)
}
الإخراج
ينتج الكود المعدل الآن الإخراج المتوقع:اختبار
testيسمح هذا التعديل للوظيفة الرئيسية بالانتظار بعد تشغيل goroutine، مما يمنحه الوقت الكافي لتنفيذ وطباعة رسالة "الاختبار" قبل انتهاء البرنامج.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3