Tôi có đoạn mã sau:Biểu thức async lambda với chờ đợi trả về Nhiệm vụ?
// Get all of the files from the local storage directory.
var files = await folder.GetFilesAsync();
// Map each file to a stream corresponding to that file.
var streams = files.Select(async f => { return await f.OpenStreamForWriteAsync(); });
Tôi mong chờ streams
là loại IEnumerable<Stream>
nhưng trên thực tế nó là của IEnumberable<Task<Stream>>
, đó là những gì tôi sẽ đã mong đợi tôi đã bỏ qua các từ khóa đang chờ đợi. Kiểu trả về của OpenStreamForWriteAsync
là Task<Stream>
- chắc chắn đang chờ nó sẽ tạo ra một Stream
?
Vì vậy, tại sao câu trả về đang chờ trả lại trả lại một Tác vụ?
Cảm ơn sự giúp đỡ của bạn.
phương thức không đồng bộ luôn trả về 'Tác vụ' hoặc 'Tác vụ'. Chọn chính nó không quan tâm đến kiểu trả về. Vì vậy, nó dự án một nhiệm vụ enumerable bởi vì lambda chọn của bạn là không đồng bộ. Bạn có thể lặp qua bộ sưu tập của mình và chờ luồng. –
vcsjones
Vâng, người ta có thể viết một "async void" phương pháp, đó là những gì tôi cho là đã xảy ra ở đây. Làm cách nào để khắc phục sự cố? –
OK Tôi sẽ thử điều đó. –