Từ khóa async
do làm cho số CIL thay đổi (ngay cả khi không có gì chờ đợi bên trong phương thức), nhưng chủ yếu là để cho phép await
hiển thị.Tại sao TCS của tôi không chờ đợi?
Nhưng tôi không mong đợi những điều sau đây xảy ra:
static void Main(string[] args)
{
Task t = Go();
t.Wait();
}
static async Task Go()
{
Console.WriteLine(1);
await AAA(3000);
Console.WriteLine(2);
}
static Task<object> AAA(int a) // <--- No `async`
{
TaskCompletionSource<object> tcs = new TaskCompletionSource<object>();
Task.Delay(a).ContinueWith(b => tcs.SetResult(null));
return tcs.Task;
}
in này:
1
(wait)
2
Nhưng nếu tôi thay đổi
static Task<object> AAA(int a)
để
static async Task<object> AAA(int a)
It in:
1
2
(no wait)
Câu hỏi
Tại sao tôi không thấy sự chậm trễ? TCS chỉ được giải quyết sau ba giây. Trong khi đó, nhiệm vụ không được giải quyết và nên được chờ đợi.
Tôi nghĩ rằng [razor118] (http://stackoverflow.com/a/32785865/477420) câu trả lời là minh chứng tốt nhất của sự cố - thay đổi 'tác vụ tĩnh
Vâng, tôi bị cắn bởi
Ngớ ngẩn hay không phải là cuộc gọi của bạn, nhưng chắc chắn là giáo dục (và được viết tốt). Cả hai phiên bản mã (async/non-async) đều có vẻ hợp lý và làm tôi bối rối (và tôi đặt cược đủ người dựa trên phiếu bầu). –