Tôi có một async
phương thức không trả về dữ liệu:
public async Task MyAsyncMethod()
{
// do some stuff async, don't return any data
}
Tôi đang gọi điều này từ một phương thức khác trả về một số dữ liệu:
public string GetStringData()
{
MyAsyncMethod(); // this generates a warning and swallows exceptions
return "hello world";
}
Gọi MyAsyncMethod()
mà không chờ nó gây ra cảnh báo " Vì cuộc gọi này không được chờ, nên phương thức hiện tại tiếp tục chạy trước khi cuộc gọi được hoàn thành " trong phòng thu trực quan. Trên trang cảnh báo đó có ghi:
Bạn chỉ nên xem xét loại bỏ cảnh báo nếu bạn chắc chắn rằng bạn không muốn đợi cuộc gọi không đồng bộ hoàn tất và phương thức được gọi sẽ không đưa ra bất kỳ ngoại lệ nào .
Tôi chắc chắn rằng tôi không muốn đợi cuộc gọi hoàn tất; Tôi không cần hoặc có thời gian. Nhưng cuộc gọi có thể đưa ra ngoại lệ.
Tôi đã vấp phải vấn đề này một vài lần và tôi chắc chắn đó là một vấn đề phổ biến phải có giải pháp chung.
Làm cách nào để gọi phương thức async một cách an toàn mà không cần chờ kết quả?
Cập nhật:
Đối với những người đề xuất rằng tôi chỉ chờ kết quả, đây là mã đáp ứng yêu cầu web trên dịch vụ web của chúng tôi (ASP.NET Web API). Chờ đợi trong ngữ cảnh UI sẽ giữ luồng UI miễn phí, nhưng chờ trong cuộc gọi yêu cầu web sẽ đợi Tác vụ kết thúc trước khi trả lời yêu cầu, do đó tăng thời gian phản hồi mà không có lý do.
MyAsyncMethod().Wait()