หลังจากจัดการกับรูปแบบ async / คอยรูปของ C # ในขณะนี้ฉันก็ตระหนักว่าฉันไม่รู้วิธีอธิบายสิ่งที่เกิดขึ้นในรหัสต่อไปนี้:
async void MyThread()
{
while (!_quit)
{
await GetWorkAsync();
}
}
GetWorkAsync()
จะถือว่าคืนค่าTask
ที่ไม่สามารถรอได้ซึ่งอาจหรือไม่อาจทำให้เกิดการสลับเธรดเมื่อดำเนินการต่อเนื่อง
ฉันจะไม่สับสนถ้าการรอไม่ได้อยู่ในวง ฉันคาดหวังว่าส่วนที่เหลือของวิธี (เช่นความต่อเนื่อง) อาจจะดำเนินการในหัวข้ออื่นซึ่งเป็นเรื่องปกติ
อย่างไรก็ตามในวงแนวคิดของ "ส่วนที่เหลือของวิธีการ" ทำให้ฉันมีหมอกเล็กน้อย
จะเกิดอะไรขึ้นกับ "ส่วนที่เหลือของลูป" หากเธรดเปิดอยู่ต่อเนื่องกับหากไม่เปลี่ยน เธรดใดที่วนซ้ำครั้งถัดไปของลูปที่เรียกใช้งาน
การสังเกตของฉันแสดง (ไม่ได้รับการตรวจสอบอย่างแน่ชัด) ว่าการวนซ้ำแต่ละครั้งเริ่มต้นในเธรดเดียวกัน (ฉบับดั้งเดิม) ในขณะที่การดำเนินการต่อเนื่องจะดำเนินการอีกครั้ง สิ่งนี้เป็นจริงได้ไหม ถ้าใช่นี่คือระดับของการขนานที่ไม่คาดคิดซึ่งจำเป็นต้องคำนึงถึงความปลอดภัยของเธรดแบบ vis-a-vis ของเมธอด GetWorkAsync หรือไม่?
UPDATE: คำถามของฉันไม่เหมือนกันตามที่แนะนำโดยบางคน while (!_quit) { ... }
รูปแบบรหัสเป็นเพียงความเรียบง่ายของรหัสที่เกิดขึ้นจริงของฉัน ในความเป็นจริงเธรดของฉันคือวนรอบที่ยาวนานซึ่งประมวลผลคิวอินพุตของไอเท็มงานในช่วงเวลาปกติ (ทุกๆ 5 วินาทีโดยค่าเริ่มต้น) การตรวจสอบเงื่อนไขการเลิกใช้จริงไม่ใช่การตรวจสอบสนามอย่างง่ายตามที่แนะนำโดยรหัสตัวอย่าง แต่เป็นการตรวจสอบการจัดการเหตุการณ์