【发布时间】:2015-02-12 09:11:12
【问题描述】:
public async Task<string> GetName(int id)
{
Task<string> nameTask = Task.Factory.StartNew(() => string.Format("Name matching id {0} = Developer", id));
return nameTask.Result;
}
在上面的方法返回语句中,我使用了Task<T>.Result 属性。
public async Task<string> GetName(int id)
{
Task<string> nameTask = Task.Factory.StartNew(() => string.Format("Name matching id {0} = Developer", id));
return await nameTask;
}
我在这里使用await Task<T>。如果我认为 await 会释放调用线程但Task<T>.Result 会阻塞它,我不会错,对吗?
【问题讨论】:
-
由于第二个代码没有延续 - 你什么也得不到。在第一个代码中,您只需将方法标记为异步,但您不等待。
-
要了解有关
async-await的更多信息,请查看myasync-awaitcuration 上的文章。 -
@RoyiNamir,你的说法不正确吗?第一种方法通过使用
async没有任何收获,因为该方法阻塞了调用线程。但是,第二种方法应该让出当前线程并且在任务设置为完成状态之前不会阻塞。 -
@MattWolf - 我同意第二种方法对调用它的任何方法都有好处,通过在任务完成时让它将控制权交还给调用者。
标签: c# multithreading async-await