async
phương pháp khác với phương pháp bình thường. Bất cứ điều gì bạn trở về từ async
các phương thức đều được gói trong mộtTask
.
Nếu bạn trả lại không có giá trị (void), nó sẽ được bọc lại Task
, Nếu bạn trả lại, int
nó sẽ được bọc Task<int>
và cứ thế.
Nếu phương thức không đồng bộ của bạn cần trả về, int
bạn sẽ đánh dấu loại trả về của phương thức Task<int>
và bạn sẽ trả về đơn giản int
không phải là Task<int>
. Trình biên dịch sẽ chuyển đổi int
thành Task<int>
cho bạn.
private async Task<int> MethodName()
{
await SomethingAsync();
return 42;//Note we return int not Task<int> and that compiles
}
Sameway, Khi bạn trả về kiểu trả về Task<object>
của phương thức của bạn sẽ làTask<Task<object>>
public async Task<Task<object>> MethodName()
{
return Task.FromResult<object>(null);//This will compile
}
Vì phương thức của bạn đang trả về Task
, nên nó không trả về bất kỳ giá trị nào. Nếu không nó sẽ không biên dịch.
public async Task MethodName()
{
return;//This should work but return is redundant and also method is useless.
}
Hãy nhớ rằng phương pháp async mà không có await
câu lệnh là không async
.