Theo kịch bản nào người ta sẽ muốn sử dụng
public async Task AsyncMethod(int num)
thay vì
public async void AsyncMethod(int num)
Kịch bản duy nhất mà tôi có thể nghĩ đến là nếu bạn cần nhiệm vụ để có thể theo dõi tiến trình của nó.
Ngoài ra, trong phương pháp sau, có phải là async và đang chờ các từ khóa không cần thiết không?
public static async void AsyncMethod2(int num)
{
await Task.Factory.StartNew(() => Thread.Sleep(num));
}
Thread.Sleep
với các nhiệm vụ của mình mà bạn nên sử dụngawait Task.Delay(num)
Task.Delay
thể không phải Task.AsyncDelay
là tất cả các phương thức trong nhiệm vụ là Async
async void
thay thế async Task
. Phương thức bị lỗi vì nó đang sử dụng một đối tượng bối cảnh Entity Framework được khai báo là thành viên của bộ điều khiển đã bị loại bỏ trước khi phương thức kết thúc để thực thi. Khung xử lý bộ điều khiển trước khi phương thức của nó kết thúc để thực thi. Tôi đã thay đổi phương thức thành Nhiệm vụ không đồng bộ và nó đã hoạt động.
Foo()
sẽ trở thànhFooAsync()
.