Tôi đã đọc http://msdn.microsoft.com/en-US/library/vstudio/hh191443.aspx. Ví dụ mã:C# async chạy đơn luồng?
async Task<int> AccessTheWebAsync()
{
// You need to add a reference to System.Net.Http to declare client.
HttpClient client = new HttpClient();
// GetStringAsync returns a Task<string>. That means that when you await the
// task you'll get a string (urlContents).
Task<string> getStringTask = client.GetStringAsync("http://msdn.microsoft.com");
// You can do work here that doesn't rely on the string from GetStringAsync.
DoIndependentWork();
// The await operator suspends AccessTheWebAsync.
// - AccessTheWebAsync can't continue until getStringTask is complete.
// - Meanwhile, control returns to the caller of AccessTheWebAsync.
// - Control resumes here when getStringTask is complete.
// - The await operator then retrieves the string result from getStringTask.
string urlContents = await getStringTask;
// The return statement specifies an integer result.
// Any methods that are awaiting AccessTheWebAsync retrieve the length value.
return urlContents.Length;
}
Trang cũng nói:
Các async và chờ đợi từ khóa không gây đề bổ sung để được tạo ra. Các phương thức không đồng bộ không yêu cầu đa luồng vì một phương thức async không chạy trên chủ đề riêng của nó
Điều này "không tạo chuỗi bổ sung" được áp dụng trong phạm vi của phương thức được đánh dấu là không đồng bộ?
Tôi sẽ tưởng tượng để cả GetStringAsync và AccessTheWebAsync chạy cùng một lúc (nếu không GetStringAsync sẽ không bao giờ kết thúc như AccessTheWebAsync kiểm soát ngay bây giờ), cuối cùng GetStringAsync phải chạy trên một luồng khác từ chuỗi của AccessTheWebAsync.
Đối với tôi, viết phương pháp async chỉ hữu ích tại không bổ sung thêm chủ đề khi các phương pháp đó đang chờ đợi cũng là async (mà đã sử dụng thêm chủ đề để làm việc của riêng mình song song)
là hiểu biết của tôi có đúng không?
Bạn có thể giải thích ý bạn là gì bởi "hoạt động không đồng bộ tự nhiên không yêu cầu chuỗi"? Công việc đó có thể được xử lý như thế nào? Bạn đang nói về một thời gian của một thread được phân chia giữa các nhiệm vụ? –
@VincePanuccio: Đó là một chút dài để mô tả trong một bình luận, nhưng tôi có [một bài đăng blog] (http://blog.stephencleary.com/2013/11/there-is-no-thread.html) mà đi vào chi tiết. –