Đây không phải là bản sao của "Cách gọi phương thức async một cách an toàn trong C # mà không phải chờ đợi" .
Làm thế nào để tôi tuyệt đối ngăn chặn cảnh báo sau đây?
cảnh báo CS4014: Vì cuộc gọi này không được chờ đợi, nên việc thực hiện phương thức hiện tại tiếp tục trước khi cuộc gọi được hoàn thành. Cân nhắc áp dụng toán tử 'await' cho kết quả của cuộc gọi.
Một ví dụ đơn giản:
static async Task WorkAsync()
{
await Task.Delay(1000);
Console.WriteLine("Done!");
}
static async Task StartWorkAsync()
{
WorkAsync(); // I want fire-and-forget
// more unrelated async/await stuff here, e.g.:
// ...
await Task.Delay(2000);
}
Những gì tôi đã thử và không thích:
static async Task StartWorkAsync()
{
#pragma warning disable 4014
WorkAsync(); // I want fire-and-forget here
#pragma warning restore 4014
// ...
}
static async Task StartWorkAsync()
{
var ignoreMe = WorkAsync(); // I want fire-and-forget here
// ...
}
Đã cập nhật , vì câu trả lời được chấp nhận ban đầu đã được chỉnh sửa, tôi đã thay đổi câu trả lời được chấp nhận thành câu trả lời bằng cách sử dụng loại bỏ C # 7.0 , vì tôi không nghĩ ContinueWith
là phù hợp ở đây. Bất cứ khi nào tôi cần ghi lại các trường hợp ngoại lệ cho các hoạt động quên và quên, tôi sử dụng một phương pháp phức tạp hơn được đề xuất bởi Stephen Cleary tại đây .
async void
phương thức trợ giúp.
#pragma
là không tốt đẹp?