tôi tạo ra đoạn mã sau:async và chờ đợi là đơn luồng Thực sự?
using System;
using System.Threading.Tasks;
namespace ConsoleApplication2
{
class Program
{
static void Main()
{
Console.WriteLine("M Start");
MyMethodAsync();
Console.WriteLine("M end");
Console.Read();
}
static async Task MyMethodAsync()
{
await Task.Yield();
Task<int> longRunningTask = LongRunningOperationAsync();
Console.WriteLine("M3");
//and now we call await on the task
int result = await longRunningTask;
//use the result
Console.WriteLine(result);
}
static async Task<int> LongRunningOperationAsync()
{
await Task.Delay(1000);
return 1;
}
}
}
đầu ra:
M Start
M end
M3
1
Đó là tốt nhưng khi tôi nhìn vào hồ sơ Chủ đề chương trình của nó này: Và rồi này: Và sau đó:
Vì vậy, có vẻ như như tôi đẻ trứng đề, nhưng từ MSDN nói:
Từ Asynchronous Lập trình với Async và chờ đợi: Chủ đề
Các async và chờ đợi từ khóa không gây đề bổ sung để được tạo. 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 chuỗi riêng của nó. Phương thức này chạy trên ngữ cảnh đồng bộ hiện tại và chỉ sử dụng thời gian trên luồng chỉ khi phương thức hoạt động. Bạn có thể sử dụng Task.Run để di chuyển công việc CPU bị ràng buộc đến chủ đề nền , nhưng một chuỗi nền không hỗ trợ quá trình chỉ chờ kết quả có sẵn.
Tôi có thiếu hoặc không hiểu điều gì đó không? Cảm ơn.
nó sử dụng các chủ đề exisitng từ nhóm chủ đề, không tạo một chủ đề –
Trông giống như một cửa sổ thực sự tiện lợi trong Visual Studio. Xin lỗi cho câu hỏi ngoài chủ đề, nhưng phiên bản nào hỗ trợ? –
Trang trí đầu ra của bạn bằng 'Thread.CurrentThread.ManagedThreadId' và bạn có thể thấy rằng 3 luồng đang được sử dụng. –