ฉันมีasync
วิธีการที่ไม่ส่งคืนข้อมูล:
public async Task MyAsyncMethod()
{
// do some stuff async, don't return any data
}
ฉันกำลังเรียกสิ่งนี้จากวิธีอื่นซึ่งคืนค่าข้อมูลบางอย่าง
public string GetStringData()
{
MyAsyncMethod(); // this generates a warning and swallows exceptions
return "hello world";
}
การโทรMyAsyncMethod()
โดยไม่รอมันทำให้เกิด " เพราะการโทรนี้ไม่รอวิธีการปัจจุบันยังคงทำงานก่อนที่การโทรจะเสร็จสิ้น " เตือนใน visual studio ในหน้าคำเตือนนั้นระบุว่า:
คุณควรพิจารณาปราบปรามเตือนเฉพาะถ้าคุณแน่ใจว่าคุณไม่ต้องการที่จะรอให้สายตรงกันที่จะเสร็จสมบูรณ์และว่าวิธีการที่เรียกว่าจะไม่เพิ่มข้อยกเว้นใด ๆ
ฉันแน่ใจว่าฉันไม่ต้องการรอให้การโทรเสร็จสมบูรณ์ ฉันไม่ต้องการหรือมีเวลา แต่การโทรอาจเพิ่มข้อยกเว้น
ฉันพบปัญหานี้สองสามครั้งและฉันแน่ใจว่าเป็นปัญหาทั่วไปที่ต้องมีวิธีแก้ไขปัญหาร่วมกัน
ฉันจะเรียกวิธีการ async อย่างปลอดภัยโดยไม่รอผลลัพธ์ได้อย่างไร
ปรับปรุง:
สำหรับคนที่แนะนำว่าฉันเพิ่งรอผลลัพธ์นี่คือรหัสที่ตอบสนองต่อคำขอทางเว็บในบริการเว็บของเรา (ASP.NET Web API) การรอในบริบท UI ทำให้เธรด UI ว่างอยู่ แต่การรอการร้องขอทางเว็บจะรอให้ภารกิจเสร็จสิ้นก่อนที่จะตอบกลับคำขอซึ่งจะเป็นการเพิ่มเวลาตอบกลับโดยไม่มีเหตุผล
MyAsyncMethod().Wait()