async
วิธีการแตกต่างจากวิธีการปกติ ไม่ว่าคุณจะกลับมาจากasync
วิธีการใดก็ตามจะห่อด้วยไฟล์Task
.
หากคุณไม่ส่งคืนค่า (เป็นโมฆะ) จะถูกห่อไว้Task
หากคุณส่งคืนint
จะถูกห่อด้วยTask<int>
และอื่น ๆ
หากวิธีการ async ของคุณจำเป็นต้องส่งคืนint
คุณจะต้องทำเครื่องหมายประเภทการส่งคืนของวิธีการเป็นTask<int>
และคุณจะส่งคืนแบบธรรมดาint
ไม่ใช่Task<int>
. คอมไพเลอร์จะแปลงไฟล์int
ให้Task<int>
คุณ
private async Task<int> MethodName()
{
await SomethingAsync();
return 42;//Note we return int not Task<int> and that compiles
}
Sameway เมื่อคุณส่งTask<object>
คืนประเภทผลตอบแทนของวิธีการของคุณควรเป็นTask<Task<object>>
public async Task<Task<object>> MethodName()
{
return Task.FromResult<object>(null);//This will compile
}
เนื่องจากวิธีของคุณกำลังส่งคืนTask
จึงไม่ควรส่งคืนค่าใด ๆ มิฉะนั้นจะไม่รวบรวม
public async Task MethodName()
{
return;//This should work but return is redundant and also method is useless.
}
เก็บไว้ในใจว่าวิธี async โดยไม่ต้องมีคำสั่งไม่ได้await
async