Hax*_*Hax 1 c# blocking task-parallel-library
我预计下面的代码会被阻塞近 5 秒,但事实并非如此。它立即打印出来。Result操作不是阻塞的吗?
class Program
{
static void Main()
{
// Return a value type with a lambda expression
Task<int> task1 = Task<int>.Factory.StartNew(() => Task.Delay(5000).Id + 100);
int i = task1.Result;
Console.WriteLine(i);
}
}
Run Code Online (Sandbox Code Playgroud)
此代码不等待Delay完成。它开始延迟,然后立即返回Id+100。因此,当代码到达Result操作时,task1is 几乎总是处于Completed状态,因此您Result可以立即得到。
您可以尝试以下操作以获得所需的行为
Task<int> task1 = Task.Run(async () => await Task.Delay(5000).Id + 100);
int i = task1.Result;
Run Code Online (Sandbox Code Playgroud)
或者更好的是,使用await而不是Result到处使用
Task<int> task1 = Task.Run(async () => await Task.Delay(5000).Id + 100);
int i = await task1;
Run Code Online (Sandbox Code Playgroud)
甚至
int i = await Task.Delay(5000).Id + 100
Run Code Online (Sandbox Code Playgroud)
(但我在这里不确定,因为实际代码中的任务内部可能有更多逻辑)
| 归档时间: |
|
| 查看次数: |
128 次 |
| 最近记录: |